【发布时间】:2020-03-26 09:15:52
【问题描述】:
后台进程正在写入日志,我想将此日志中的所有文本输出到终端,直到单词“Do”为止。
我正在使用这个命令:
tail -f service.log | sed '/Do/ q'
由于某种原因,此命令将输出单词“Do”并等待下一行写入日志之前退出。
为了验证,我运行了我的命令,然后在另一个窗口中使用以下命令手动附加到文件:
echo A >> service.log
# outputs 'A' in the sed window
echo B >> service.log
# outputs 'B' in the sed window
echo C >> service.log
# outputs 'C' in the sed window
echo Do >> service.log
# outputs 'Do' in the sed window, but the tail and sed command is still running.
echo E >> service.log
# now the tail and sed command finishes.
sed 似乎只在下一行写入文件后才退出,而不是在输出时退出。
如何让我的 sed 命令在单词“Do”的第一个输出时退出?
【问题讨论】:
-
这是哪个 sed?我无法重现 GNU sed 4.7 的挥之不去
-
我的sed版本是4.2.2
-
作为一种变通方法,您可以尝试使用 Perl 等效的
perl -pe '/Do/ && exit' -
谢谢 Mark,但是 perl 命令的行为与 sed 相同。
-
这是哪个 sed?你说它是 sed 4.2.2,但它是 GNU sed 吗?使用
sed --version查看。