Muitas boas respostas foram dadas a essa pergunta até agora, mas ainda sinto falta de uma por awk
não usar getline
. Desde que, em geral , não é necessário usar getline
, eu iria para:
awk ' f && NR==f+1; /blah/ {f=NR}' file #all matches after "blah"
ou
awk '/blah/ {f=NR} f && NR==f+1' file #matches after "blah" not being also "blah"
A lógica sempre consiste em armazenar a linha onde "blá" é encontrado e, em seguida, imprimir as linhas que são uma linha depois.
Teste
Arquivo de exemplo:
$ cat a
0
blah1
1
2
3
blah2
4
5
6
blah3
blah4
7
Obter todas as linhas depois de "blá". Isso imprime outro "blá" se aparecer após o primeiro.
$ awk 'f&&NR==f+1; /blah/ {f=NR}' a
1
4
blah4
7
Obtenha todas as linhas após "blá" se elas não contiverem "blá".
$ awk '/blah/ {f=NR} f && NR==f+1' a
1
4
7
-A1
opção