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
ffor diferente de zero e a linha atual corresponder atext_c, imprima a linha.