SED不打印最后的输入

时间:2019-02-01 12:15:28

标签: linux bash sed stdout tail

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

的问题是,添加一个新行到文件后,该行不打印,但前一个来代替。

我是Linux菜鸟。到目前为止,我尝试将sed的输出传递给另一个程序,例如echo,printf,cat,更多,更少,但是这些都不起作用。

我还尝试在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”)

如果我只使用尾部,而不sed的,被适当地显示每个新行 - 但当然不与我想要的东西预先考虑

1 个答案:

答案 0 :(得分:0)

您将尾巴用于跟随模式。因此,sed的输入未关闭。为了优化,输出以块(缓冲的)或最后完成。 sed -u ...应该会有所帮助:它将输出模式更改为 unbuffered

相关问题