Ich möchte eine Datei abschließen, aber nur Ausgabezeilen, die eine bestimmte Zeichenfolge enthalten. Ist das möglich?
11
benutze grep. Es ist nur für diesen Zweck gebaut.
Um Zeilen aus einem Ende von / var / log / syslog zu finden, die "cron" enthalten, führen Sie einfach Folgendes aus:
tail -f /var/log/syslog | grep cron
Und da es alles über stdin akzeptiert, können Sie es auch für die Ausgabe eines anderen Befehls verwenden, indem Sie auf die gleiche Weise wie oben (unter Verwendung des Symbols |) Pipings erstellen.
grep
es puffert, wenn es nicht interaktiv verwendet wird, z. B. wenn es Teil einer längeren Pipeline ist. GNU grep 2.5.1 bietet die--line-buffered
Option, dies zu umgehen, wenn das Entfernen von grep aus der Pipeline keine Option ist. (Wenn ich grep sagen Puffer meine ich Sie nicht ausgegeben sehen , bis der Puffer so etwas wie 4k erreicht hat.)Ich hoffe, das hilft.
quelle
Hier sind einige andere Ideen, die zwar nicht so einfach sind, aber interessante zusätzliche Flexibilität bieten können:
Erstens können Sie mit awk anstelle von grep filtern:
das funktioniert genauso wie im Beispiel mit
grep
. Sie können dies erweitern, indem Sie die Leistung von awk verwenden, zum Beispiel:Dadurch wird das 6. bis letzte Feld der Ausgabe gedruckt (Felder sind durch Leerzeichen getrennt).
Eine andere ähnliche Idee ist die Verwendung eines Perl-Einzeilers:
das funktioniert genau so
grep
. Vielleicht möchten Sie einen Zeilennummernzähler und nur das 6. Feld? Wie wäre es damit:Natürlich können all diese Dinge auch mit anderen Tools erledigt werden, aber ich wollte veranschaulichen, dass es hier einige unterhaltsame Möglichkeiten gibt, allgemeinere Sprachen wie awk oder perl zu verwenden.
quelle
Ein weiterer bemerkenswerter Trick, wenn Sie eine CSV-Datei mit Headern haben, die Sie weglassen möchten, z.
Es spielt keine Rolle, wie lange die Eingabe dauert
tail
,+n -2
die erste Zeile wird weggelassen.quelle