Answers:
非交互使用时,大多数标准命令include都会grep
缓冲输出,这意味着它不会立即将数据写入stdout
。在写入之前,它会收集大量数据(取决于OS,在Linux中通常为4096字节)。
在您的命令中,grep
的输出通过管道传递到stdin
of 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
禁用缓冲。
注意