【发布时间】:2019-02-01 12:15:27
【问题描述】:
我正在尝试使用 tail 检查文件中的新行,然后使用 sed 在每个新行前面添加一些内容,并将输出打印到标准输出。
问题是,在文件中添加新行后,该行没有打印,而是前一行。
我是 Linux 菜鸟。到目前为止,我尝试将 sed 的输出通过管道传输到另一个程序,例如 echo、printf、cat、more、less,但这些都不起作用。
我还尝试在 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,则每个新行都会正确显示 - 但当然不会添加我想要的内容。
【问题讨论】:
-
在“打开另一个终端并输入:”时,您的具体操作是什么?我真正想问的是,你的
tail | sed命令、echo >>命令和打印结果的时间线和位置是什么? -
它对我有用(当我在 sed 替换中使用
\n而不是换行符时)。我只需要等一会儿。 -
@GenoChen 嗨,我要做的是:1)使用这个“tail -F ....”命令作为我的 docker 容器的命令 2)运行容器 3)打开另一个腻子会话运行 docker 的机器 4) 使用 docker exec
登录到正在运行的容器 5) 执行“echo >>”命令。此时我仍然可以在第一个窗口中看到容器的标准输出。 -
@choroba 你能分享 sed 字符串吗?我认为我发布的那个中没有任何换行符。
-
我清楚地看到你的 sed 表达式有两行,所以必须有一个换行符。
标签: linux bash sed stdout tail