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, grep
de saída é canalizada para stdin
de sed
comando, de modo que grep
o buffer sua saída.
Portanto, --line-buffered
opção que causa o grep
uso 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 -o0
para desativar o buffer.
Nota