Como grep um fluxo contínuo, com paginação

3

Eu postei isso no Superusuário, mas não recebi nenhum comprador: link

Eu quero pegar um arquivo de log e filtrar algumas entradas de log irrelevantes, como aquelas no nível INFO. A resposta acima do Stack Overflow me fez parte do caminho:

$ tail -f php_error_log | grep -v INFO

A próxima parte que quero é ter paginação neste fluxo, como com menos. less + F funciona em fluxos contínuos, mas não posso aplicar isso ao grep. Como posso conseguir isso?

Desde postar essa pergunta, eu trabalhei nela e descobri que less está esperando o EOF aparecer, e trava até recebê-lo ( origem ). Isso explica por que tentar seguir um pipe não está funcionando. Eu inventei um pequeno script para fazer o que eu quero, de forma deselegante:

#!/bin/bash
tail -f /data/tmp/test.txt | grep --line-buffered foo > /data/tmp/foo &
pid=$!
echo $pid
sleep 1
less +F /data/tmp/foo
kill $pid
rm /data/tmp/foo

Estou convencido de que é possível fazer isso com mais elegância, talvez com um arquivo temporário que é automaticamente limpo sem interação direta.

    
por phasetwenty 30.10.2014 / 03:06

1 resposta

4

Que tal isso:

grep -V INFO php_error_log | less +F

Ou você pode executar multitail php_error_log , depois que o multitail for iniciado, pressione e e siga as instruções para adicionar uma expressão regular para filtrar. Para monitoramento contínuo de um ou mais arquivos de log ao longo do tempo, o multitail é uma boa solução.

    
por 30.10.2014 / 08:35