Ao usar de maneira não interativa, a maioria dos comandos padrão inclui grep, armazena em buffer a saída, o que significa que ela não grava dados imediatamente stdout. Ele coleta grande quantidade de dados (depende do SO, no Linux, geralmente 4096 bytes) antes de escrever.
Em seu comando, grepde saída é canalizada para stdinde sedcomando, de modo que grepo buffer sua saída.
Portanto, --line-bufferedopção que causa o grepuso do buffer de linha, ou seja, escrever a saída toda vez que ela vê uma nova linha, em vez de esperar para atingir 4096 bytes por padrão. Mas, neste caso, você não precisa grep, basta usar tail+ sed:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
Com o comando que não tem opção para modificar o buffer, você pode usar o GNU coreutils stdbuf
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
para ativar o buffer de linha ou usar -o0para desativar o buffer.
Nota