为什么我不能将输出从sed重定向到文件

lac*_*991 2 bash debian

我正在尝试运行以下命令

./someprogram | tee /dev/tty | sed 's/^.\{2\}//' > output_file
Run Code Online (Sandbox Code Playgroud)

但是当我去检查时,文件总是空白的.如果我> output_file从命令的末尾删除,我能够看到sed的输出没有任何问题.

有没有办法可以将此命令中sed的输出重定向到文件?

naa*_*aab 5

sed使用-u标志从命令中删除output-buffering,并确保要记录的内容不在stderr上

-u, - unbuffered

  load minimal amounts of data from the input files and flush the output buffers more often
Run Code Online (Sandbox Code Playgroud)

最终命令:

./someprogram | tee /dev/tty | sed -u 's/^.\{2\}//' > output_file
Run Code Online (Sandbox Code Playgroud)

这种情况发生在流(通常是一个程序在整个生命周期内将输出发送到stdout).

sed/ grep和其他命令在这些情况下做一些缓冲,你必须明确禁用它,以便在程序仍在运行时能够输出.