Cuando se usa de forma no interactiva, la mayoría de los comandos estándar incluyen, incluir en el grepbúfer la salida, lo que significa que no escribe datos inmediatamente stdout. Recopila una gran cantidad de datos (depende del sistema operativo, en Linux, a menudo 4096 bytes) antes de escribir.
En su comando, grepsalida 's se canaliza stdinde sedcomandos, así grepamortiguar su salida.
Entonces, la --line-bufferedopción causa el grepuso del búfer de línea, lo que significa escribir la salida cada vez que ve una nueva línea, en lugar de esperar a alcanzar 4096 bytes de forma predeterminada. Pero en este caso, no necesitas grepnada, solo usa tail+ sed:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
Con el comando que no tiene la opción de modificar el búfer, puede usar GNU coreutils stdbuf
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
para activar el almacenamiento en línea o usar -o0para desactivar el almacenamiento en búfer.
Nota