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