无法从 sed 重定向输出

Sem*_*lon 4 sed io-redirection

我正在通过 sed 从时钟输出管道以从数字中删除前导零。它看起来像这样:

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

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

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

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

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

Bar*_*mar 5

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

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

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

  • `-u` 是一个 GNU 特定的选项 (3认同)