Lors de l'utilisation non interactive, la plupart des commandes standard incluent grep
, tamponnent la sortie, ce qui signifie qu'elle n'écrit pas les données immédiatement stdout
. Il recueille une grande quantité de données (dépend du système d'exploitation, sous Linux, souvent 4096 octets) avant d'écrire.
Dans votre commande, grep
la sortie « est canalisé vers stdin
de sed
commande, de sorte grep
tampon sa sortie.
Ainsi, l' --line-buffered
option provoquant l' grep
utilisation du tampon de ligne, ce qui signifie l'écriture de la sortie à chaque fois qu'il voit une nouvelle ligne, au lieu d'attendre d'atteindre 4096 octets par défaut. Mais dans ce cas, vous n'avez pas besoin grep
du tout, utilisez simplement tail
+ sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
Avec une commande qui n'a pas d'option pour modifier le tampon, vous pouvez utiliser GNU coreutils stdbuf
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
pour activer la mise en mémoire tampon en ligne ou -o0
pour désactiver la mémoire tampon.
Remarque