如何使用分页grep连续流

pha*_*nty 5 linux bash grep less

我将此发布给超级用户,但没有人接受:https : //superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging

我想获取一个日志文件并过滤掉一些不相关的日志条目,例如 INFO 级别的日志条目。上面的 Stack Overflow 答案让我受益匪浅:

$ tail -f php_error_log | grep -v INFO
Run Code Online (Sandbox Code Playgroud)

我想要的下一部分是在此流中进行分页,例如使用 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
Run Code Online (Sandbox Code Playgroud)

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

And*_*man 4

这个怎么样:

grep -V INFO php_error_log | less +F
Run Code Online (Sandbox Code Playgroud)

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