Combinar tail -f com grep?

26

Oi, eu quero continuar olhando para um arquivo de log, mas também não quero ver coisas irrelevantes, só estou interessado em algo com "foobar" nele.

Então, se eu estivesse seguindo o arquivo, faria

 tail file | grep "foobar"

Agora que estou adicionando a opção -f, existe uma maneira de mostrar de alguma forma apenas o que eu quero? usando grep ou outra técnica?

user893730
fonte
1
Parece que a sua resposta já está escrita aqui: stackoverflow.com/questions/5427483/…
uSlackr
1
Parece que a resposta xyr está na pergunta.
JdeBP

Respostas:

41

Você quase escreveu a resposta, que é:

tail -f file.log | grep "foobar"

É isso aí.

Ravachol
fonte
1
Uau, você está certo, acho que não esperava que isso funcionasse, ainda não o faço, a tubulação não deveria acontecer quando um comando terminou a execução? Eu acho que isso mostra que não é, acontece toda vez que existe uma saída, certo?
user893730
3
Não, ele lançará os dois programas em paralelo, eo segundo (grep) sairá assim que o STDOUT da cauda for fechado. Esse é o ponto inteiro de tubos, os dados de streaming :)
Ravachol
4
Quando grepé a última linha do pipe, sua saída é armazenada em buffer, para que você veja a saída filtrada de tail -fao vivo, em vez de atrasada. Observe que se você usar vários grepcomandos, qualquer um cuja saída foi canalizada precisará de uma --line-bufferedopção (assumindo GNU ou BSD grep) para manter esse comportamento.
ghoti