tail -f path
Mit den oben genannten Optionen werden Änderungen sofort an der Datei ausgegeben. Ich möchte jedoch einen Filter auf die Ausgabe anwenden, der nur angezeigt wird, wenn ein Schlüsselwort xxx
darin enthalten ist.
Wie soll man das angehen?
Antworten:
Mit Unix können Sie die Ausgabe eines Programms in ein anderes leiten.
Um den Schwanz zu filtern, können Sie grep verwenden:
quelle
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
undtail -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
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) undgrep
auch zeilenweise gepuffert sind, weil ihre Ausgabe an Ihr Terminal gesendet wird:Aber dann entscheiden Sie sich dafür, etwas wie
awk
odercut
die Ausgabe weiter zu verarbeiten.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. undawk
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 .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 Funktionfflush()
, 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, nachunbuffer
etwas zu suchen , das meiner Meinung nach von derexpect
Toolchain bereitgestellt wird (ich habe es nie benutzt).Ich hoffe, Sie fanden das nützlich.
Prost, Cameron
quelle
und Sie können mehrere Pipes und Greps verwenden und Dinge mit grep -v ausschließen, mit grep -i die Groß- und Kleinschreibung ignorieren usw.
dh: tail -100f / var / log / messages | grep -V ACPI | grep -i ata
Beginnen Sie mit dem Tailing von 100 Zeilen ab dem Ende und bleiben Sie dabei. Schließen Sie zuerst alle Zeilen mit ACPI aus und zeigen Sie dann Zeilen mit ata, ATA oder einer Mischung dieser Zeilen an.
Ein weiteres praktisches sind die ABC-Optionen für die Zeilen After, Before und Context (Zeilen vor und nach).
quelle