Найдите шаблон и замените шаблон, добавив перед ним новую строку - PullRequest
1 голос
/ 24 апреля 2020

Хотел бы заменить шаблон новой строкой и сохранить образец -

Пример ввода

:16R:ABC:20C::CORP:30E::ABC

хотел бы заменить шаблон ": [0-9] [0-9 ] "с новой строкой вместе с": [0-9] [0-9] "шаблон

Output
:16R:ABC
:20C::CORP
:30E::ABC

В настоящее время придумали -

echo ":16R:ABC:20C::CORP:30E::ABC" | sed 's/[:][0-9][0-9]/\
:/g;/^$/!P;D'

:R:ABC
:C::CORP
:E::ABC

Ожидаемый результат:

:16R:ABC
:20C::CORP
:30E::ABC

Это не сохранение шаблона, какие-либо предложения?

1 Ответ

1 голос
/ 24 апреля 2020

Используя простое решение sed, POSIX-ly

sed 's/[A-Z]\([:][0-9][0-9][A-Z]\)/\n\1/g'

Если вы можете использовать awk и иметь доступный вариант GNU, вы можете позвонить patsplit(), чтобы разделить шаблон :[0-9][0-9][A-Z] и начните замену со 2-го экземпляра и далее

awk '{ n = patsplit($0, arr, /[:][0-9][0-9][A-Z]/)
       for (iter = 2; iter <= n; iter++) 
           sub(arr[iter], ORS arr[iter]); 
     }1'

или с любым POSIX awk

awk '{ n = split($0, arr, /[:]/)
       for (iter = 3; iter <= n; iter++) 
           if ( match(arr[iter], /[0-9][0-9][a-zA-Z]/) ) 
               sub(":"arr[iter], ORS ":" arr[iter]);  
     }1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...