如何使用 grep 的多个选项(实时输出)?

如何使用 grep 的多个选项(实时输出)?

例如,当我这样做时

sudo tcpdump | grep -E '.dev:8888|ads' | grep -v 'adsl'

ads.google.com由于某种原因,所有输出都被抑制,例如,如果我访问,则不会显示任何内容,当我删除 时,它会显示grep -v,因此基本命令有效。

但是,如果我尝试创建一个包含以下内容的文件:

test
test2

我是否grep -E 'test|test2' | grep -v 'test2'得到了我想要的输出(test)。那么当它不断更新时有什么区别,我将如何使用多个选项来grep修改输出?

答案1

您可能会遇到行缓冲问题。指示tcpdump中间grep命令对它们的输出进行行缓冲,如下所示:

sudo tcpdump -l | grep --line-buffered -E '.dev:8888|ads' | grep -v 'adsl'

也可以看看关闭管道中的缓冲当这些命令选项不可用时的一般解决方案。

相关内容