Извлечь все строки между двумя шаблонами, содержащие хотя бы один вхождение одной строки - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть большой файл, хранящийся в переменной bash в виде строки, и мне нужно извлечь все строки между двумя одинаковыми словами. Но мне также нужно проверить, есть ли между этими строками хотя бы один случай magicstring. Вот пример:

abc
xxxxxxxx
yyyyyyyy

abc
magicstring
kkkkkkkk
magicstring

abc
mmmmmmmm
nnnnnnnn

Я ищу следующее:

magicstring
kkkkkkkk
magicstring

Два одинаковых слова всегда abc, но с использованием sed, awk или даже расширения параметров Как я мог уточнить, что мне нужно слово magicstring, содержащееся хотя бы один раз в этих строках?

Я предполагаю, что я не знаю раздел, в котором содержится magicstring, так как это большой файл , РЕДАКТИРОВАТЬ: Кроме того, magicstring появляется только один или несколько раз только в одном разделе.

Используя, например, sed, я получу все строки, как это: sed '/abc/,/abc/{//!d}' <<<($myFileInVar), но я не знаю, чтобы уточнить нужно magicstring.

Ответы [ 2 ]

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

Использование любого awk в любой оболочке на каждом UNIX поле:

$ awk -v RS= -v ORS='\n\n' '/magicstring/' file
abc
magicstring
kkkkkkkk
magicstring

$ awk -v RS= -v ORS='\n\n' '/magicstring/{sub(/^[^\n]+\n/,""); print}' file
magicstring
kkkkkkkk
magicstring
1 голос
/ 23 апреля 2020

gawk на помощь!

$ awk -v RS='(^|\n)abc\n' '/magicstring/' file

magicstring
kkkkkkkk
magicstring

определите слово-разделитель как разделитель записей, напечатайте запись, если она соответствует строке magi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...