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.