尾-f | sed 到文件不起作用

tail -f | sed to file doesn't work

我在过滤正在写入的日志文件并将输出写入另一个文件时遇到问题(如果可能,使用 tee,这样我可以看到它正在运行)。

我可以使用 tee>> 将其输出到标准输出,但不能写入文件。 我也可以让它写入文件,但前提是我从 tail 中删除 -f 选项,这是我需要的。

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

  1. tail -f 不写入文件:tail -f test.log | sed 's/a/b/' works
  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 不在标准输出上输出也不写入文件.

我想 3. 工作。

这是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} 以适应您的技能。