Uso simples do tail & grep. Condições múltiplas

6

Desculpas por minha ignorância, sou relativamente novo nisso.

Estou tentando ler um arquivo de log que está sendo gravado por um daemon simples. O que eu gostaria de fazer é filtrar minha saída "ao vivo" para determinados "vários tipos".

Meus tipos são: DEBUG|INFO|WARN|ERROR|FATAL

Isso é o que eu tenho até agora, e funciona para 1 caso, mas não consigo trabalhar para vários casos.

tail -f log.txt | grep INFO

Eu tentei algumas coisas para tentar dizer que quero " WARN e & ERROR ", mas nada está realmente funcionando para mim. Como eu iria corrigir isso?

Obrigado

    
por Mike 23.10.2009 / 17:05

3 respostas

14

tente

tail -f log.txt | egrep 'WARN|ERROR'
    
por 23.10.2009 / 17:11
2

Além de alternar para egrep / grep -E para obter o operador de alternância de expressões regulares estendidas, você também pode usar vários argumentos -e para grep ou mesmo fgrep / grep -F regulares

De fato, se suas pesquisas forem todas strings estáticas (como a pergunta original), você pode até "fazer downgrade" até fgrep / grep -F , o que pode aumentar a velocidade comparações sem regexps).

fgrep -e DEBUG -e INFO -e WARN -e ERROR -e FATAL

O POSIX também permite que os padrões sejam separados por novas linhas.

# bash-ish to put a newlines into the string
fgrep $'DEBUG\nINFO\nWARN\nERROR\nFATAL'

# Standard syntax, but easier to break while editing(?):
fgrep "$(for f in DEBUG INFO WARN ERROR FATAL; do echo "$f"; done)"
    
por 23.10.2009 / 22:19
0

Isso também funciona (normal grep e escape do caractere de pipe):

tail -f log.txt | grep 'WARN\|ERROR'
    
por 23.10.2009 / 20:37