【问题标题】:How do I get sed to quit on the first match and not after? [duplicate]如何让 sed 在第一场比赛而不是之后退出? [复制]
【发布时间】: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查看。

标签: linux bash sed watch


【解决方案1】:

试试大写Q

sed '/Compiled/Q'

@rodentry,你是对的。怎么样

sed 's/Do/\n/' | head -1

或者解决方案只能是sed

【讨论】:

  • 谢谢,但唯一的变化是“Do”根本不输出。 sed 命令仍会等待,直到在日志中添加新行后才退出。
  • 这将做同样的事情,除了它不会打印最后一行。
  • 这对我有用:sed '/Do/,$d'
猜你喜欢
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 2016-11-18
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多