Как распечатать всю строку между соответствием первого вхождения слова? - PullRequest
0 голосов
/ 16 марта 2020

input.txt

ABC
CDE
EFG
XYZ
ABC
PQR
EFG

Из вышеуказанного файла я хочу напечатать строки между 'AB C' и первым появлением 'EFG'.

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

ABC
CDE
EFG
ABC
PQR
EFG 

Как мне напечатать строки от одного слова до первого появления второго слова?

Ответы [ 3 ]

1 голос
/ 16 марта 2020

РЕДАКТИРОВАТЬ: В случае, если вы хотите напечатать все вхождения линий между AB C в DEF и оставить другие, попробуйте выполнить следующее.

awk '/ABC/{found=1} found;/EFG/{found=""}' Input_file


Не могли бы вы попробовать следующее.

awk '/ABC/{flag=1} flag && !count;/EFG/{count++}' Input_file
0 голосов
/ 16 марта 2020

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

sed -n '/ABC/{:a;N;/EFG/!ba;p}' file

Отключить неявную печать с помощью параметра -n.

Соберите строки между ABC и EFG и напечатайте их. Повторите.

Если вы хотите печатать только между первым экземпляром от ABC до EFG, используйте:

sed -n '/ABC/{:a;N;/EFG/!ba;p;q}' file

Для печати со второго по четвертое, используйте:

sed -En '/ABC/{:a;N;/EFG/!ba;x;s/^/x/;/^x{2,4}$/{x;p;x};x;}' file
0 голосов
/ 16 марта 2020
$ awk '/ABC/,/EFG/' file

Выход:

ABC
CDE
EFG
ABC
PQR
EFG
...