grep显示所有行,而不仅仅是匹配,设置退出状态

hsi*_*siu 8 grep

我正在将一些命令的输出传递给egrep,我正在使用它来确保没有出现特定的故障字符串.

不幸的是,命令本身在失败时不会返回正确的非零退出状态,这就是我这样做的原因.

command | egrep -i -v "badpattern"
Run Code Online (Sandbox Code Playgroud)

这可以为我提供我想要的退出代码(如果badpattern出现在输出中,则为1,否则为0),但是,它只会输出与模式不匹配的行(因为-v开关设计为).根据我的需要,这些线条是最有趣的线条.

有没有办法让grep只是盲目地传递它作为输入的所有行,并且只是给我适当的退出代码?

如果没有,我以为我可以使用perl -ne"print;如果/ badpattern /则退出1".我使用-n而不是-p,因为-p不会打印有问题的行(因为它运行单行打印).所以,我使用-n并调用print自己,这至少给了我第一个违规行,但是然后输出(和执行)停在那里,所以我必须做类似的事情

perl -e '$code = 0; while (<>) { print; $code = 1 if /badpattern/; } exit $code'

整个交易,但有点多,是否有一个简单的命令行开关grep,只会做我正在寻找的?

Nem*_*emo 6

实际上,你的perl想法并不坏.尝试:

perl -pe 'END { exit $status } $status=1 if /badpattern/;'
Run Code Online (Sandbox Code Playgroud)

我敢打赌,这至少与建议的其他选项一样快.