Pelo menos com GNU grep 2.12
:
$ grep -Pzo 'xyz(?:.*\n)*?\K~this' file
~this
Se a sua versão grep
não permitir -P
com -z
, você pode usar pcregrep em vez disso:
$ pcregrep -Mo 'xyz(?:.*\n)*?\K~this' file
~this
Eu tenho uma longa lista de strings separadas por novas linhas e cada seção separada por uma string começando com ~
(não há outros ~
no arquivo). Desejo estender o grep para encontrar o texto ~
logo abaixo da correspondência.
Entrada:
abc
ads
acb
abc
acsa
acfs
~notthis
abc
ads
acb
xyz <-- pattern
acsa
acfs
~this <-- output
abc
ads
acb
abc
acsa
acfs
~no
Saída ao pesquisar por xyz
:
~ this
Com awk
eu faria algo como
awk '/xyz/{x=1}x&&/~/{print;exit}' file
mas eu quero usar o grep se ele puder me dar uma vantagem de desempenho
Pelo menos com GNU grep 2.12
:
$ grep -Pzo 'xyz(?:.*\n)*?\K~this' file
~this
Se a sua versão grep
não permitir -P
com -z
, você pode usar pcregrep em vez disso:
$ pcregrep -Mo 'xyz(?:.*\n)*?\K~this' file
~this
Tags grep text-processing