Wenn die meisten Standardbefehle nicht interaktiv verwendet werden, grep
wird die Ausgabe gepuffert, dh, es werden nicht sofort Daten geschrieben stdout
. Es sammelt große Datenmengen (abhängig vom Betriebssystem, unter Linux häufig 4096 Byte), bevor es geschrieben wird.
In Ihrem Befehl, grep
wird ‚s Ausgang geleitet stdin
von sed
Befehl, so grep
seine Ausgabe puffern.
Also, --line-buffered
was Option grep
Zeilenpuffer verwendet wird , bedeutet die Ausgabe geschrieben wird jedes Mal , wenn eine neue Zeile sah, anstatt zu warten , 4096 Bytes standardmäßig zu erreichen. Aber in diesem Fall brauchst du gar nicht grep
, benutze einfach tail
+ sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
Mit dem Befehl, der keine Option zum Ändern des Puffers hat, können Sie GNU coreutils stdbuf verwenden
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
Aktivieren der Zeilenpufferung oder -o0
Deaktivieren des Puffers.
Hinweis