Vamos considerar este arquivo de teste:
$ cat file
section ONE
text_a
text_b
text_c <-ignore this
section TWO
text_b
text_c <-keep this
section THREE
text_a
text_b
text_c <-ignore this
Para selecionar qualquer linha contendo text_c
que esteja em section TWO
:
$ awk '/^section/{f=0} /^section TWO/{f=1} f && /text_c/' file
text_c <-keep this
Se a entrada for gerada não de um arquivo, mas de command
, use:
command | awk '/^section/{f=0} /^section TWO/{f=1} f && /text_c/'
Como funciona
-
/^section/{f=0}
Sempre que encontrarmos uma linha que comece com
section
, definaf=0
. -
/^section TWO/{f=1}
Se a linha começar com
section TWO
, substitua o comando anterior e definaf=1
. -
f && /text_c/
Se
f
for diferente de zero e a linha atual corresponder atext_c
, imprima a linha.