Grepping grep 输出失败

Grepping grep 输出失败

我正在尝试 grep ngrep 的输出。不幸的是,当我将另一个 grep 添加到管道时,我根本没有得到任何输出。它也可能是其他命令 - cat / grep / tee - 一切都会破坏链条。示例:

# this works:
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180'
--
U +1.469535 xxx:5060 -> xxx:5060
SIP/2.0 180 Ringing.
--
U +0.001384 xxx:5060 -> xxx:2048
SIP/2.0 180 Ringing.

#these don't:
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180' | egrep '^U'
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180' | cat
$ ngrep -l -q -T -Wbyline -d any udp and port 5060 |
    egrep -B1 '^SIP/2.0 180' | tee test

cat somefile如果一开始就使用ngrep 而不是 ngrep,一切都会按预期进行。有什么想法可能出什么问题吗?

答案1

您是否已将 egrep 别名为任何可能修改文本的东西,比如grep --color可能会做什么?$ type egrep

od -bc还要使用(如 jch 所述)或检查输出中是否存在“隐藏”控制字符hd -C

答案2

编辑:我刚刚用‘egrep’遇到了这个问题——正在做:

tail -f somefile|egrep 'somepattern'

每两秒钟就能提供令人满意的输出;但接下来产生的没有什么

tail -f somefile|egrep 'somepattern'|tr -d '%'

在手册页中挖掘一番后,我发现“--line-buffered”选项再次产生了输出!

然后我发现了这个管道缓冲描述- 看起来,归根结底是一些命令行实用程序(例如:tail -f)会在 stdout 上定期调用 fflush,而其他命令行实用程序(cut、grep 等)则不会。

以下是我错误的第一个回复


通常当我遇到这些类型的问题时,管道中的一个或多个程序会将输出放在多个文件描述符上 - 通常是 STDERR。

您可以尝试在管道中的第一个“|”前添加“2>&1”以将 STDERR 重定向到 STDOUT。

相关内容