
Eu tenho um arquivo com várias linhas de log.
Quero retornar arquivos que contenham a palavra 'fail', mas que não contenham o padrão:
Failed any test here _fr in Pro-any text here
Então, se contiver: _fr em Pro-
Em seguida, ignore a linha, mesmo que contenha a palavra fail.
Responder1
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 que correspondem 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 !
significa lógico não.
Rejeitando ambos _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 ambos os formulários:
$ awk '/[fF]ail/ && ! /_(fr|en) in Pro-/' test.log
keep fail