Schwanz -f mit grep kombinieren?

26

Hallo, ich möchte weiterhin eine Protokolldatei ansehen, aber ich möchte auch keine irrelevanten Dinge sehen. Ich bin nur an etwas interessiert, in dem "foobar" vorkommt.

Also, wenn ich die Datei verfolgen würde, würde ich tun

 tail file | grep "foobar"

Gibt es eine Möglichkeit, nach dem Hinzufügen der Option -f nur die gewünschten Elemente anzuzeigen? mit grep oder einer anderen technik?

user893730
quelle
1
Offenbar ist Ihre Antwort bereits hier geschrieben: stackoverflow.com/questions/5427483/…
uSlackr
1
Es scheint, dass xyr Antwort in der Frage ist.
JdeBP

Antworten:

41

Sie haben fast die Antwort geschrieben:

tail -f file.log | grep "foobar"

Das ist es.

Ravachol
quelle
1
Woah, Sie haben Recht, ich glaube, ich habe nicht damit gerechnet, ich weiß es immer noch nicht. Sollte es nicht zu Piping kommen, wenn ein Befehl ausgeführt wurde? Ich denke das zeigt, dass es nicht so ist, es passiert jedes Mal wenn dort eine Ausgabe, oder?
User893730
3
Nein, die beiden Programme werden parallel gestartet, und das zweite Programm (grep) wird beendet, sobald das STDOUT von tail geschlossen wird. Das ist der springende Punkt bei Pipes, Daten-Streaming :)
Ravachol
4
Wenn grepes sich um die letzte Zeile in der Pipe handelt, wird die Ausgabe zeilenweise gepuffert, sodass die gefilterte Ausgabe von tail -fLive angezeigt wird und nicht verzögert. Beachten Sie, dass, wenn Sie mehrere grepBefehle verwenden würden, jeder, dessen Ausgabe weitergeleitet wurde, eine --line-bufferedOption benötigen würde (unter der Annahme von GNU oder BSD grep), um dieses Verhalten beizubehalten.
Ghoti