EDIT: Como dmourati e Caleb apontaram, você também pode usar em egrepvez de grep -Epor conveniência. Em alguns sistemas, isso será um link para o mesmo binário; em outros, uma cópia fornecida pelo pacote grep. De qualquer maneira, ele vive como uma alternativa ao -Eswitch. No entanto, de acordo com a página de manual do GNU grep:
[…] Dois programas variantes egrepe fgrepestão disponíveis. egrepé o mesmo que grep -E. fgrepé o mesmo que grep -F. A chamada direta como egrepou fgrepé preterida, mas é fornecida para permitir que aplicativos históricos que dependem deles sejam executados sem modificação.
Como são comandos sinônimos, tudo se resume a preferência, a menos que você não tenha o egrep. No entanto, para compatibilidade com encaminhamento, é recomendável usar a grep -Esintaxe, pois o outro método foi oficialmente descontinuado.
Usar em grep -Evez de egrepjustificar uma resposta duplicada?
Caleb
@ Caleb Não vejo por que não. Há mais de uma maneira de esfolar um gato, e este site permite a capacidade de lista de todos
dtest
1
Sim, mas são apenas links simbólicos entre si, não dois programas diferentes com alguma sobreposição funcional. Portanto, isso não seria mais um 'adendo' (leia-se: comentário), não uma resposta completa? Eu tive downvotes para delitos menores ...
Marcin
@DTest: Por direito, dmourati realmente me venceu por alguns segundos e, embora ele não tenha explicado o raciocínio, ele merece algum crédito aqui. Você estava claramente atrasado para a festa, já que nós dois tivemos pelo menos duas votações antes de você entrar. Alterar a sintaxe de um binário com link simbólico para um argumento geralmente é algo para o qual você usaria um comentário, não uma resposta separada. Se você quiser a pele do gato diferente usar sed, awk, perl, multitailou ninja_foo.
Caleb
1
@ Test: Tomei a liberdade de fazer uma edição factual significativa da sua resposta para adicionar algumas fontes originais. Parece que -E é recomendado para uso futuro, então marquei isso, mas removi sua observação sobre distros que não possuem egrep. As distros mencionadas têm egrep, é apenas um binário separado em vez de um link simbólico.
Caleb
21
Tente canalizá-lo para egrep com listas separadas de palavras que você deseja filtrar:
tail -f log_file | egrep -v 'ELB|Pingdom|Health'
Observe que o uso de parênteses na lista de correspondências é opcional. Como o |é tratado como um operador OR lógico pelo grep, se ocorre como parte de um subgrupo ou não. '(ELB|Pingdom|Health)'funcionaria exatamente da mesma maneira. Para alguns, a sintaxe pode ser mais óbvia; Acho mais fácil digitar sem, pois posso alternar de uma única correspondência para uma lista de possíveis correspondências sem voltar a adicionar os parênteses.
Para crédito extra, vale ressaltar que multitailo ninja foo quando se trata de filtrar a saída. Por exemplo, você pode filtrar suas palavras assim:
multitail -e ELB -e Pingdom -e Health -f log_file
Você também pode usá-lo para colorir ou realçar a saída em vez de apenas filtrá-la.
Edição: Veja a resposta do DTests e os comentários para obter uma explicação completa de como o egrep é apenas uma maneira alternativa obsoleta de disparar grep -E.
Sim, obrigado, isso foi um erro de digitação. Para referência futura, já que sites de troca de pilhas funcionam como wikis, esse é o tipo de coisa que você pode corrigir.
Caleb
Eu pensei que a edição tinha que ter mais de 6 caracteres?
Sirex
Se você não tem alta rep, sim, há um mínimo de 6 caracteres, mas neste caso o caractere 1 é super importante. Você pode forçar a alteração adicionando um comentário HTML ao corpo. Os personagens serão contados até o limite e você poderá observar por que está fazendo a alteração.
Caleb
Caleb @ muito obrigado pela sugestão multitail é incrível ! Não posso acreditar que passei tanto tempo na minha vida sem ele.
Deseja executar scripts diferentes condicionalmente, dependendo de diferentes palavras-chave ou padrões nos arquivos de log?
Se você deseja ter um comportamento baseado em script, dependendo do conteúdo dos arquivos de log, convém fazer a filtragem usando o Expect. ( http://en.wikipedia.org/wiki/Expect ) Expect é uma extensão Tcl, mas também existe uma versão em Python do Expect.
O Expect fornece uma poderosa opção flexível como a instrução que permite especificar diferentes comportamentos condicionalmente, dependendo dos estados ou padrões presentes no seu fluxo de entrada. Por exemplo:
Assim, você especifica padrões na instrução expect e especifica comportamentos diferentes, e pode agrupar tudo em um loop, e pode escrever facilmente filtros muito poderosos que também gravam partes de sua entrada em arquivos diferentes, ou largam-na completamente, ou execute ações e execute outros scripts, dependendo do que está na sua entrada.
Então, tudo se resume a por que você está tentando filtrar seus arquivos de log, executar ações na entrada de log ou apenas por razões de arquivamento?
Respostas:
Não sei como usar o awk em vez do grep, mas isso funciona para mim:
EDIT: Como dmourati e Caleb apontaram, você também pode usar em
egrep
vez degrep -E
por conveniência. Em alguns sistemas, isso será um link para o mesmo binário; em outros, uma cópia fornecida pelo pacote grep. De qualquer maneira, ele vive como uma alternativa ao-E
switch. No entanto, de acordo com a página de manual do GNU grep:Como são comandos sinônimos, tudo se resume a preferência, a menos que você não tenha o egrep. No entanto, para compatibilidade com encaminhamento, é recomendável usar a
grep -E
sintaxe, pois o outro método foi oficialmente descontinuado.fonte
grep -E
vez deegrep
justificar uma resposta duplicada?sed
,awk
,perl
,multitail
ouninja_foo
.Tente canalizá-lo para egrep com listas separadas de palavras que você deseja filtrar:
Observe que o uso de parênteses na lista de correspondências é opcional. Como o
|
é tratado como um operador OR lógico pelo grep, se ocorre como parte de um subgrupo ou não.'(ELB|Pingdom|Health)'
funcionaria exatamente da mesma maneira. Para alguns, a sintaxe pode ser mais óbvia; Acho mais fácil digitar sem, pois posso alternar de uma única correspondência para uma lista de possíveis correspondências sem voltar a adicionar os parênteses.Para crédito extra, vale ressaltar que
multitail
o ninja foo quando se trata de filtrar a saída. Por exemplo, você pode filtrar suas palavras assim:Você também pode usá-lo para colorir ou realçar a saída em vez de apenas filtrá-la.
Edição: Veja a resposta do DTests e os comentários para obter uma explicação completa de como o egrep é apenas uma maneira alternativa obsoleta de disparar
grep -E
.fonte
fonte
Por que você deseja registrar essas informações?
Se você deseja ter um comportamento baseado em script, dependendo do conteúdo dos arquivos de log, convém fazer a filtragem usando o Expect. ( http://en.wikipedia.org/wiki/Expect ) Expect é uma extensão Tcl, mas também existe uma versão em Python do Expect.
O Expect fornece uma poderosa opção flexível como a instrução que permite especificar diferentes comportamentos condicionalmente, dependendo dos estados ou padrões presentes no seu fluxo de entrada. Por exemplo:
Assim, você especifica padrões na instrução expect e especifica comportamentos diferentes, e pode agrupar tudo em um loop, e pode escrever facilmente filtros muito poderosos que também gravam partes de sua entrada em arquivos diferentes, ou largam-na completamente, ou execute ações e execute outros scripts, dependendo do que está na sua entrada.
Então, tudo se resume a por que você está tentando filtrar seus arquivos de log, executar ações na entrada de log ou apenas por razões de arquivamento?
fonte