Combiner queue -f avec grep?

26

Salut, je veux continuer à regarder un fichier journal, mais je ne veux pas non plus voir des choses non pertinentes, je ne suis intéressé par rien avec "foobar" dedans.

Donc, si je suivais le fichier, je ferais

 tail file | grep "foobar"

Maintenant que j'ajoute l'option -f, existe-t-il un moyen de ne montrer en quelque sorte que ce que je veux? en utilisant grep ou une autre technique?

user893730
la source
1
Il semble que votre réponse soit déjà écrite ici: stackoverflow.com/questions/5427483/…
uSlackr
1
Il semble que la réponse xyr soit dans la question.
JdeBP

Réponses:

41

Vous avez presque écrit la réponse, qui est:

tail -f file.log | grep "foobar"

C'est ça.

Ravachol
la source
1
Woah, vous avez raison, je pense que je ne m'attendais pas à ce que cela fonctionne, je ne le fais toujours pas, la tuyauterie n'est-elle pas censée se produire lorsqu'une commande a terminé son exécution? Je suppose que cela montre que ce n'est pas le cas, cela se produit chaque fois qu'il y a une sortie, non?
user893730
3
Non, il lancera les deux programmes en parallèle, et le second (grep) se fermera dès que STDOUT de tail se fermera. C'est tout l'intérêt des tuyaux, du streaming de données :)
Ravachol
4
Lorsque se greptrouve la dernière ligne du tube, sa sortie est mise en mémoire tampon de ligne, vous voyez donc la sortie filtrée de tail -flive, plutôt que retardée. Notez que si vous deviez utiliser plusieurs grepcommandes, toutes celles dont la sortie était canalisée auraient besoin d'une --line-bufferedoption (en supposant GNU ou BSD grep) afin de conserver ce comportement.
ghoti