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 -Fist dein Freund. Ich lasse dich den Unterschied nachschlagen.
Aber tail -fund tail -Fdrucken 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 tailexplizit zeilenweise gepuffert sind (oder ihre Ausgabe am Ende jeder Zeile leeren) und grepauch 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 awkoder cutdie 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 grepvollständig gepuffert ausgeführt wird. und awkempfängt so 4kB auf einmal (standardmäßig).
In diesem Fall können Sie grepmit der --line-bufferedOption 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. awkist die Funktion fflush(), die denselben Namen wie das C-Gegenstück hat, Werkzeuge wie Perl und Python haben etwas Ähnliches).
Mit so etwas haben cutSie wahrscheinlich kein Glück. ... aber Sie könnten versuchen, nach unbufferetwas zu suchen , das meiner Meinung nach von der expectToolchain bereitgestellt wird (ich habe es nie benutzt).
Ich hoffe, Sie fanden das nützlich.
Prost, Cameron