SED 不打印最后的输入

SED does not print the last input

我正在尝试使用 tail 检查文件中的新行,然后使用 sed 在每个新行前加上一些内容,并将输出打印到标准输出。

问题是,在向文件添加新行后,不会打印该行,而是打印前一行。

我是一个Linux菜鸟。到目前为止,我尝试将 sed 的输出通过管道传输到另一个程序,例如 echo、printf、cat、more、less,但其中 none 有效。

我还尝试在 sed 字符串的末尾添加 "p" 作为模式标志,但这会导致每个字符串打印两次。

tail -F /usr/local/logs/myfile.log | sed -e "s/^/[hostname:$HOSTNAME] 
[file:myfile.log] /" 

我打开另一个终端并输入:

echo "test1" >> /usr/local/logs/myfile.log

(没有任何反应,我希望打印带有 "test1" 的消息)

echo "test2" >> /usr/local/logs/myfile.log

(打印 [hostname:5b1dc0d27a45] [file:myfile.log] test1,我预计 "test2")

如果我只使用 tail,而不使用 sed,则每个新行都会正确显示 - 但当然不会添加我想要的内容。

您将尾巴与跟随模式一起使用。所以 sed 的输入没有关闭。为了优化,输出以块(缓冲)或末尾完成。 sed -u ... 应该有所帮助:它将输出模式更改为 unbuffered