Используя Regex Повреждение текста на последней цифре с помощью инструментов Linux как sed или awk

У меня есть следующий список, который я хочу повредить на цифре. Например:

От:

103Ru
103mRh
104
1041

Кому:

103
Ru
103
mRh
104
1041

Я хотел бы использовать Regx с sed или возможно awk для достижения этого результата. Но большинство моих подходов перестало работать. Мне нужны некоторый совет или возможно некоторое решение.Спасибо

4
задан 28 March 2014 в 00:07

2 ответа

$ 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

вторая команда замены точно так же, как первое, но она ищет обратный шаблон: не-число сопровождается числом.

4
ответ дан 17 November 2019 в 14:07

Вот еще два варианта:

  1. grep

    grep -oP '\d+|.*' file
    

    Объяснение:

    • -P : активирует Perl Совместимые Регулярные выражения, который позволяет нам использовать \d для цифр. | символ, логичный OR, средства это grep сначала попытается соответствовать одному или нескольким (+) цифры и затем все остальное (.*).
    • -o : Это вызывает grep только распечатать часть соответствия входной строки. Побочный эффект состоит в том, что, если строка имеет несколько соответствий, она распечатает каждый из них на новой строке, таким образом, она произведет желаемый вывод.
  2. 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 просто печатает строку.
3
ответ дан 17 November 2019 в 14:07

Другие вопросы по тегам:

Похожие вопросы: