arquivos Grep com regex

1

Eu tenho um arquivo com várias linhas de log.

Eu 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 ele contém: _fr in Pro -

Ignore a linha mesmo que a palavra falhe.

    
por cool breeze 19.09.2016 / 18:31

1 resposta

3

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
    
por 19.09.2016 / 18:40

Tags