Linux 如何grep并仅显示我希望从运行程序的输出中获得的数据?

Linux 如何grep并仅显示我希望从运行程序的输出中获得的数据?,linux,shell,Linux,Shell,我通过跑步知道 ./mycommand | grep "keywords" 在程序完成执行后,将为我找到关键字行 但是如果我的程序持续运行/循环很长时间,并且在每次循环后注销结果,我如何在终端中出现新的输出时进行grep而不需要等待它完成执行呢?为了做到这一点,最好是将mycommand的结果记录到日志文件中,类似于/var/log/mycommand_logfile.log(您的程序mycommand可能需要修改才能这样做) 然后打开一个新终端并启动以下命令: tail

我通过跑步知道

./mycommand | grep "keywords"
在程序完成执行后,将为我找到
关键字


但是如果我的程序持续运行/循环很长时间,并且在每次循环后注销结果,我如何在终端中出现新的输出时进行grep而不需要等待它完成执行呢?

为了做到这一点,最好是将
mycommand
的结果记录到日志文件中,类似于
/var/log/mycommand_logfile.log
(您的程序
mycommand
可能需要修改才能这样做)

然后打开一个新终端并启动以下命令:

tail -f /var/log/mycommand_logfile.log | grep "keywords"

这将显示最后几行代码,它们是在mycommand执行过程中写入的。

如果我理解你的意思,你应该做你想做的事情。Grep不会等待输入结束。它逐行处理它,并在遇到与它所寻找的匹配的行时生成输出

如果您发现它不是这样工作的,那么您的命令行中是否还有其他可能导致阻塞的内容?比如,如果你真的在做这样的事情:

./mycommand | sort | grep "keyword"
然后,“sort”命令将等待获得所有数据,以便在将其传递给grep之前对其进行排序


或者,问题是mycommand是一个资源密集型操作,并且以高优先级运行,因此在mycommand不再运行之前,grep不会获得任何cpu周期。我只是在这里吐痰。关键是,您的命令行做得很好。

关键字在程序执行完毕后找到。
否。感谢您提供的信息,我上次测试了它,但它不起作用,不确定原因,可能是我输入了错误的关键字。如果要挑剔,
tail-f
似乎不会自动结束。