我遇到了过滤正在编写的日志文件并将输出写入另一个文件的问题(如果可能的话,使用tee
,所以我可以看到它正常工作)。
我可以在stdout上输出它,但不能使用tee
或>>
写入文件。
我也可以让它写入文件,但只有当我从尾部删除-f
选项时,我才需要。
所以,这里是命令的概述:
tail -f
无需写入文件:tail -f test.log | sed 's/a/b/'
有效 tail
写入文件:tail test.log | sed 's/a/b/' | tee -a a.txt
有效 tail -f
写入文件:tail -f test.log | sed 's/a/b/' | tee -a a.txt
不会在stdout上输出也不会写入文件。我想3.工作。
答案 0 :(得分:4)
这是sed
缓冲。使用sed -u
。 man sed
:
-u, --unbuffered
load minimal amounts of data from the input files and flush the
output buffers more often
这是对它的测试(创建文件foo
和bar
):
$ for i in {1..3} ; do echo a $i ; sleep 1; done >> foo &
[1] 12218
$ tail -f foo | sed -u 's/a/b/' | tee -a bar
b 1
b 2
b 3
快速或增加{1..3}
以适合您的技能。