无法重定向 sed 的输出

无法重定向 sed 的输出

我将时钟的输出通过 sed 进行管道传输,以删除数字中的前导零。它看起来像这样:

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g'

这工作正常并产生我想要的输出。

但是,当我尝试将输出重定向到文件时,没有任何内容写入该文件。以下不起作用。

clock -sf 'S%A, %B %d. %I:%M %P' | sed 's/\b0\+\([0-9]\+\)/\1/g' > testfile

测试文件中未写入任何内容。我究竟做错了什么?

答案1

您遇到了输出缓冲问题。sed通常在不写入终端时缓冲其输出,因此在缓冲区填满(可能每 4K 字节)之前不会将任何内容写入文件。

使用-u选项 tosed取消缓冲输出。

clock -sf 'S%A, %B %d. %I:%M %P' | sed -u 's/\b0\+\([0-9]\+\)/\1/g' > testfile

答案2

我在尝试从流输出源重定向时遇到了同样的问题。

您应该将-u(无缓冲)标志与 sed 一起使用,然后通过管道传输数据,而不是使用>>运算符附加数据(>>锁定文件并阻塞)。

而是做以下工作

someprogram | sed '/filter/' | tee myfile.txt

相关内容