Vamos considerar este arquivo de teste:
$ cat >test.log
keep fail
omit fail _fr in Pro-
Para encontrar todas as linhas que correspondem aos seus critérios:
$ awk '/[fF]ail/ && ! /_fr in Pro-/' test.log
keep fail
Para imprimir apenas os nomes dos arquivos que possuem linhas correspondentes aos seus critérios:
$ awk '/[fF]ail/ && ! /_fr in Pro-/ {print FILENAME; exit}' *.log
test.log
Como funciona:
O awk lê implicitamente um arquivo linha por linha. A condição /[fF]ail/ && ! /_fr in Pro-/ corresponde a qualquer linha que contenha Fail ou fail , mas não contenha _fr in Pro- . Em awk && significa lógico-e e ! significa lógico-não.
Rejeitando os dois _fr in Pro- e _en in Pro-
Considere este arquivo de teste:
$ cat test.log
keep fail
omit fail _fr in Pro-
omit fail _en in Pro-
Para rejeitar os dois formulários:
$ awk '/[fF]ail/ && ! /_(fr|en) in Pro-/' test.log
keep fail