如何通过分页获取连续流

如何通过分页获取连续流

我把这个发给了超级用户,但没人接受:https://superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging

我想获取一个日志文件并过滤掉一些不相关的日志条目,例如 INFO 级别的日志条目。上面的 Stack Overflow 答案帮助我找到了部分方法:

$ tail -f php_error_log | grep -v INFO

我想要的下一个部分是在这个流中进行分页,例如使用 less。less +F 适用于连续流,但我无法将其应用于 grep。我该如何实现这一点?


自从发布了这个问题后,我开始研究它,发现它less正在等待 EOF 出现,并挂起直到收到它(来源)。这解释了为什么尝试跟随管道不起作用。我编写了一个简短的脚本来做我想做的事情,但不太优雅:

#!/bin/bash
tail -f /data/tmp/test.txt | grep --line-buffered foo > /data/tmp/foo &
pid=$!
echo $pid
sleep 1
less +F /data/tmp/foo
kill $pid
rm /data/tmp/foo

我相信可以更优雅地做到这一点,也许使用无需直接交互即可自动清理的临时文件。

答案1

这个怎么样:

grep -V INFO php_error_log | less +F

或者,您可以运行multitail php_error_log,然后在 multitail 启动后,按e并按照提示添加要过滤的正则表达式。对于随时间持续监控一个或多个日志文件,multitail 是一个很好的解决方案。

相关内容