Arquivos Grep com regex

Arquivos Grep com regex

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 Failou failmas 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

informação relacionada