Kurze Antwort: tail -f somefile | grep somepattern
Dies neigt jedoch dazu, zu kurz zu kommen. Angenommen, Sie verfolgen eine Datei, die häufig gedreht wird (wenn es sich um ein Debug-Protokoll handelt, wird sie möglicherweise mehrmals gedreht). In diesem Fall tail -F
ist dein Freund. Ich lasse dich den Unterschied nachschlagen.
Aber tail -f
und tail -F
drucken Sie zuerst ein paar Zeilen aus, was in diesem Anwendungsfall oft unerwünscht ist, also fügen Sie in diesem Fall hinzu-n0
tail -F -n0 somefile | grep somepattern
Das ist in Ordnung, bis Sie eine andere Filterung durchführen möchten, und dann müssen Sie sich vor dem Puffern hüten. Standardmäßig wird stdout beim Schreiben in ein Terminal zeilenweise gepuffert, beim Schreiben in eine Pipe jedoch vollständig gepuffert. Die folgenden Befehle geben Zeilen aus, sobald sie gefunden werden, da sie tail
explizit zeilenweise gepuffert sind (oder ihre Ausgabe am Ende jeder Zeile leeren) und grep
auch zeilenweise gepuffert sind, weil ihre Ausgabe an Ihr Terminal gesendet wird:
tail -F -n0 somefile | grep somepattern
Aber dann entscheiden Sie sich dafür, etwas wie awk
oder cut
die Ausgabe weiter zu verarbeiten.
tail -F -n0 somefile | grep somepattern | awk '{print $3}'
Und jetzt fragen Sie sich, wohin Ihre Ausgabe gegangen ist ... Je nach Protokollvolumen wird möglicherweise eine Ausgabe ausgegeben, aber es wird jeweils eine Seite angezeigt, da die Standardausgabe von jetzt grep
vollständig gepuffert ausgeführt wird. und awk
empfängt so 4kB auf einmal (standardmäßig).
In diesem Fall können Sie grep
mit der --line-buffered
Option festlegen, dass die Standardausgabe immer gepuffert werden soll .
tail -F -n0 somefile | grep --line-buffered somepattern | ...
Die meisten Befehle haben jedoch kein Analogon von --line-buffered
. Bei mehr skriptfähigen Werkzeugen können Sie eine Funktion zum Leeren der Ausgabe verwenden (z. B. awk
ist die Funktion fflush()
, die denselben Namen wie das C-Gegenstück hat, Werkzeuge wie Perl und Python haben etwas Ähnliches).
Mit so etwas haben cut
Sie wahrscheinlich kein Glück. ... aber Sie könnten versuchen, nach unbuffer
etwas zu suchen , das meiner Meinung nach von der expect
Toolchain bereitgestellt wird (ich habe es nie benutzt).
Ich hoffe, Sie fanden das nützlich.
Prost, Cameron