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