RegEx для поиска нескольких строк и замены с помощью sed - PullRequest
1 голос
/ 13 апреля 2019

Мне нужно иметь RegEx, который находит \n в середине строки в качестве начальной точки, все до случайного, и заменить после 15 цифр и 49 альфа на второй строке.Мне нужно заменить все это пробелами, но вторая строка должна соединиться с первой.

Попытка

sed -r -e '{N;s/\n[[:digit:]]{15}[[:space:]]{49}//}'

Ввод

QC HOH 0H0 CA
:70:NOFX TRADE TR
100000100200621                                                 ADE RELATED WOOD                                                                                         PURCHASE

Screen shot of record

Что необходимо удалить, так это перевод строки после TRADE TR и приведение ADE, СВЯЗАННОГО с TR, чтобы оно обозначало TRADE.

Желаемый результат

QC H0H 0H0 CA
:70:NOFX TRADE TRADE RELATED WOOD                                                                                         PURCHASE

Ответы [ 2 ]

2 голосов
/ 13 апреля 2019

Это может сработать для вас (GNU sed):

sed -E 'N;s/\n[[:digit:]]{15}[[:space:]]{49}//;P;D' file

Это открывает окно с двумя строками и исправляет второе из них, если совпадает команда замены. Он всегда печатает первую из двух строк, а затем удаляет ее.

1 голос
/ 13 апреля 2019

С GNU sed:

$ sed -Ez 's/\n[[:digit:]]{15}[[:space:]]{49}//' file
QC J0B 2Y0 CA
:70:NOFX TRADE TRADE RELATED WOOD                                                                                         PURCHASE
...