通过两次grep筛选tail输出

32

使用典型的Apache访问日志,您可以运行:

tail -f access_log | grep "127.0.0.1"

这将仅显示指定IP地址创建的日志(按它们创建的顺序)。

但是,当您通过grep第二次进行管道处理以进一步限制结果时,为什么会失败?

例如,对于“.css”的简单排除:

tail -f access_log | grep "127.0.0.1" | grep -v ".css"

不会显示任何输出。


2个回答

54

13

这是缓冲的结果,只有在足够的数据可用时才会最终打印出来。

按照Shawn Chin的建议使用--line-buffered选项,或者如果stdbuf可用,则可以通过以下方式获得相同的效果:

tail -f access_log | stdbuf -oL grep "127.0.0.1" | grep -v ".css"

谢谢Thor,你也是正确的,但我认为Shawn比你先回复了。 - Craig Francis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接