GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man einen kontinuierlichen Stream „grep“?

Ich denke, Ihr Problem ist, dass grep eine Ausgabepufferung verwendet. Versuchen Sie es mit

tail -f file | stdbuf -o0 grep my_pattern

es wird den Ausgabepufferungsmodus von grep auf ungepuffert setzen.


Schalten Sie grep ein 's Zeilenpuffermodus bei Verwendung von BSD grep (FreeBSD, Mac OS X etc.)

tail -f file | grep --line-buffered my_pattern

Es sieht aus wie vor einer Weile --line-buffered spielte keine Rolle für GNU grep (wird auf so ziemlich jedem Linux verwendet), da es standardmäßig geleert wurde (YMMV für andere Unix-ähnliche wie SmartOS, AIX oder QNX). Ab November 2020 jedoch --line-buffered wird benötigt (zumindest mit GNU grep 3.5 in openSUSE, aber es scheint allgemein erforderlich zu sein, basierend auf den Kommentaren unten).


Ich verwende den tail -f <file> | grep <pattern> die ganze Zeit.

Es wird warten, bis grep geleert ist, nicht bis es fertig ist (ich verwende Ubuntu).


Wenn Sie Übereinstimmungen im gesamten finden möchten -Datei (nicht nur den Schwanz) und Sie möchten, dass sie sitzt und auf neue Übereinstimmungen wartet, funktioniert dies gut:

tail -c +0 -f <file> | grep --line-buffered <pattern>

Die -c +0 Flag sagt, dass die Ausgabe mit 0 beginnen soll Bytes (-c ) von Anfang an (+ ) der Datei.


Linux
  1. Wie kann ich in einer Datei nach einem mehrzeiligen Muster suchen?

  2. So unterdrücken Sie die Ergebnisse des Binärdateiabgleichs in grep

  3. Wie man einen Abschnitt einer Datei in der Bash-Shell grep

  4. Wie man in einem Bash-Skript nach Unicode sucht

  5. Wie bekomme ich Zeilen, die eine Zeichenfolge in einer Datei enthalten?

So erstellen Sie eine Datei unter Linux

So erstellen Sie eine Tar-Gz-Datei

So entpacken (öffnen) Sie die Gz-Datei

So finden Sie eine Zeichenfolge in einer Datei unter Linux

So verknüpfen Sie eine Datei unter Linux per Symlink

So migrieren Sie CentOS 8 auf CentOS Stream