Ao usar de forma não interativa, a maioria dos comandos padrão, inclua grep
, armazene a saída no buffer, o que significa que ela não grava dados imediatamente em stdout
. Ele coleta uma grande quantidade de dados (depende do SO, no Linux, geralmente 4096 bytes) antes de gravar.
Em seu comando, a saída de grep
é canalizada para o comando stdin
of sed
, portanto, grep
armazena em buffer sua saída.
Portanto, a opção --line-buffered
está causando grep
usando o buffer de linha, o que significa gravar a saída toda vez que ele viu uma nova linha, em vez de esperar atingir 4096 bytes por padrão. Mas, neste caso, você não precisa de grep
, apenas use tail
+ sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
Com o comando que não tem a opção de modificar o buffer, você pode usar GNU coreutils stdbuf
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
para ativar o buffer de linha ou usar -o0
para desativar o buffer.
Nota