【发布时间】:2011-09-02 23:30:13
【问题描述】:
我正在将命令的一些输出传送到 egrep,我用它来确保特定的失败字符串不会出现在其中。
不幸的是,命令本身不会在失败时返回正确的非零退出状态,这就是我这样做的原因。
command | egrep -i -v "badpattern"
这可以为我提供我想要的退出代码(如果 badpattern 出现在输出中,则为 1,否则为 0),但是,它只会输出与模式不匹配的行(因为 -v 开关是设计做)。根据我的需要,这些行是最有趣的行。
有没有办法让 grep 盲目地通过它作为输入获得的 all 行,并在适当的时候给我退出代码?
如果没有,我想我可以使用 perl -ne "print; exit 1 if /badpattern/"。我使用 -n 而不是 -p 因为 -p 不会打印有问题的行(因为它在运行单行之后打印 )。所以,我使用 -n 并自己调用 print,这至少给了我第一个违规行,但随后输出(和执行)停在那里,所以我必须做类似的事情
perl -e '$code = 0; while (<>) { print; $code = 1 if /badpattern/; } exit $code'
它完成了整个交易,但有点多,是否有一个简单的 grep 命令行开关可以满足我的需求?
【问题讨论】:
标签: grep