我将时钟的输出通过 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