tente
tail -f log.txt | egrep 'WARN|ERROR'
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
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)"
Isso também funciona (normal grep
e escape do caractere de pipe):
tail -f log.txt | grep 'WARN\|ERROR'