При использовании неинтерактивно большинство стандартных команд включают в себя grep
буферизацию вывода, что означает, что он не записывает данные немедленно stdout
. Он собирает большой объем данных (зависит от ОС, в Linux, часто 4096 байт) перед записью.
В вашей команде, grep
выход «s передаются по конвейеру stdin
из sed
команды, так что grep
буфер его выхода.
Таким образом, --line-buffered
опция, вызывающая grep
использование строкового буфера, означает запись выходных данных каждый раз, когда он видит новую строку, вместо ожидания достижения 4096 байт по умолчанию. Но в этом случае вам совсем не нужно grep
, просто используйте tail
+ sed
:
tail -f <file> | sed '/string/s/stuff//g' >> output.txt
С командой, у которой нет опции для изменения буфера, вы можете использовать GNU coreutils stdbuf
tail -f <file> | stdbuf -oL fgrep "string" | sed 's/stuff//g' >> output.txt
включить буферизацию строки или использовать -o0
для отключения буфера.
Заметка