Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我如何让sed在第一场比赛中退出而不是在第二场比赛之后退出?_Linux_Bash_Sed_Watch - Fatal编程技术网

Linux 我如何让sed在第一场比赛中退出而不是在第二场比赛之后退出?

Linux 我如何让sed在第一场比赛中退出而不是在第二场比赛之后退出?,linux,bash,sed,watch,Linux,Bash,Sed,Watch,一个后台进程正在写入一个日志,我想将这个日志中的所有文本输出到终端,直到“Do”这个词 我正在使用以下命令: tail-f service.log | sed'/Do/q' 出于某种原因,此命令将输出单词“Do”,并等待下一行写入日志后退出 为了验证,我运行了命令,然后在另一个窗口中使用以下命令手动附加到文件: echo A >> service.log # outputs 'A' in the sed window echo B >> service.log # ou

一个后台进程正在写入一个日志,我想将这个日志中的所有文本输出到终端,直到“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”时退出?

尝试使用大写字母Q

sed '/Compiled/Q'
@啮齿类动物,你说得对。怎么样

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

或者解决方案必须是
sed
only?

这是哪个sed?我无法重现GNU sed 4.7My sed版本是4.2.2作为一个解决方案,您可以尝试一个与Perl等效的
Perl-pe'/Do/&&exit'
Thank you Mark,但是Perl命令的行为与sed相同。这是哪个sed?你说它是sed 4.2.2,但它是GNU sed吗?请使用
sed--version
查看。谢谢,但唯一的变化是“Do”根本不输出。sed命令仍会等待,直到在日志中追加新行后退出。这将执行相同的操作,只是它不会打印最后一行。