У меня есть следующий список, который я хочу повредить на цифре. Например:
От:
103Ru
103mRh
104
1041
Кому:
103
Ru
103
mRh
104
1041
Я хотел бы использовать Regx с sed или возможно awk для достижения этого результата. Но большинство моих подходов перестало работать. Мне нужны некоторый совет или возможно некоторое решение.Спасибо
$ sed -r 's/([0-9])([^0-9])/\1\n\2/g' filename
103
Ru
103
mRh
104
1041
вышеупомянутое regex ищет число, сопровождаемое не число. Если найдено, это вставляет новую строку между ними.
Более подробно, sed команды формы s/old/new/
ищут old
и заменяют его new
. В нашем случае, old
состоит из двух символов: ([0-9])
соответствия любое число и, потому что это включается в parens, это сохраняет значение. ([^0-9])
соответствия что-либо кроме числа и сохраняет его также. Те два символа, если найдено, заменяются \1\n\2
, что означает первое соответствие (число), новая строка и второе соответствие (не-число).
[еще 1113]: , Если мы хотим повредиться в начале чисел, а также в конце, тогда мы добавляем еще одну команду замены:
$ echo xyz541wpk | sed -r 's/([0-9])([^0-9])/\1\n\2/g; s/([^0-9])([0-9])/\1\n\2/g'
xyz
541
wpk
вторая команда замены точно так же, как первое, но она ищет обратный шаблон: не-число сопровождается числом.
Вот еще два варианта:
grep
grep -oP '\d+|.*' file
Объяснение:
-P
: активирует Perl Совместимые Регулярные выражения, который позволяет нам использовать \d
для цифр. |
символ, логичный OR
, средства это grep
сначала попытается соответствовать одному или нескольким (+
) цифры и затем все остальное (.*
).-o
: Это вызывает grep
только распечатать часть соответствия входной строки. Побочный эффект состоит в том, что, если строка имеет несколько соответствий, она распечатает каждый из них на новой строке, таким образом, она произведет желаемый вывод.Perl
perl -lne 's/(\d+)(\D+)/$1\n$2/; print;' file
Объяснение:
-n
средства, считайте файл линию за линией и примените сценарий, данный -e
к каждой строке. -l
i) удаляет новые строки (\n
) от конца строки и ii), добавляет a \n
каждому print
.s/pattern/replacement/
: замены pattern
с replacement
. (\d+)(\D+)
: Соответствуйте одной или нескольким цифрам (\d
) сопровождаемый одной или несколькими нецифрами (\D
). Круглые скобки ()
средства, что соответствия получены так, мы можем затем обратиться к ним как $1
и $2
.print
просто печатает строку.