Cuando se usa de forma no interactiva, la mayoría de los comandos estándar incluyen, incluir en el grep
bú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, grep
salida 's se canaliza stdin
de sed
comandos, así grep
amortiguar su salida.
Entonces, la --line-buffered
opción causa el grep
uso 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 grep
nada, 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 -o0
para desactivar el almacenamiento en búfer.
Nota