tail -f | sed to file不起作用

时间:2018-02-13 13:49:23

标签: shell sed pipe filtering tail

我遇到了过滤正在编写的日志文件并将输出写入另一个文件的问题(如果可能的话,使用tee,所以我可以看到它正常工作)。

我可以在stdout上输出它,但不能使用tee>>写入文件。 我也可以让它写入文件,但只有当我从尾部删除-f选项时,我才需要。

所以,这里是命令的概述:

  1. tail -f无需写入文件:tail -f test.log | sed 's/a/b/' 有效
  2. tail写入文件:tail test.log | sed 's/a/b/' | tee -a a.txt 有效
  3. tail -f写入文件:tail -f test.log | sed 's/a/b/' | tee -a a.txt 不会在stdout上输出也不会写入文件
  4. 我想3.工作。

1 个答案:

答案 0 :(得分:4)

这是sed缓冲。使用sed -uman sed

-u, --unbuffered

          load  minimal amounts of data from the input files and flush the
          output buffers more often

这是对它的测试(创建文件foobar):

$ 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}以适合您的技能。