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

Dis*_*ame 1 grep

例如,当我这样做时

sudo tcpdump | grep -E '.dev:8888|ads' | grep -v 'adsl'
Run Code Online (Sandbox Code Playgroud)

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

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

test
test2
Run Code Online (Sandbox Code Playgroud)

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

Gui*_*ido 5

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

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

当这些命令选项不可用时,另请参阅关闭管道中的缓冲以获取一般解决方案。