我正在将某个命令的输出导入到egrep中,以确保特定的失败字符串不会出现。
很遗憾,该命令本身在失败时无法返回正确的非零退出状态,这就是我这样做的原因。
这个命令可以给我所需要的退出码(如果输出中出现了badpattern则为1,否则为0),但是它只会输出那些不匹配模式的行(因为-v开关就是设计成这样的)。对于我的需求,那些行才是最有趣的行。
是否有一种方法可以让grep盲目地通过所有输入行,并根据需要给我退出码?
如果没有,我想我可以使用perl -ne "print; exit 1 if /badpattern/"。我使用-n而不是-p,因为-p不会打印出有问题的行(因为它在运行完单行程序后再打印)。所以,我使用-n并自己调用print,这至少给了我第一个有问题的行,但是输出(和执行)会停在那里,所以我必须做一些类似于 perl -e '$code = 0; while (<>) { print; $code = 1 if /badpattern/; } exit $code'
的事情,这样就完成了整个过程,但是有点繁琐,是否有一个简单的命令行开关可以满足我的需求?
很遗憾,该命令本身在失败时无法返回正确的非零退出状态,这就是我这样做的原因。
command | egrep -i -v "badpattern"
这个命令可以给我所需要的退出码(如果输出中出现了badpattern则为1,否则为0),但是它只会输出那些不匹配模式的行(因为-v开关就是设计成这样的)。对于我的需求,那些行才是最有趣的行。
是否有一种方法可以让grep盲目地通过所有输入行,并根据需要给我退出码?
如果没有,我想我可以使用perl -ne "print; exit 1 if /badpattern/"。我使用-n而不是-p,因为-p不会打印出有问题的行(因为它在运行完单行程序后再打印)。所以,我使用-n并自己调用print,这至少给了我第一个有问题的行,但是输出(和执行)会停在那里,所以我必须做一些类似于 perl -e '$code = 0; while (<>) { print; $code = 1 if /badpattern/; } exit $code'
的事情,这样就完成了整个过程,但是有点繁琐,是否有一个简单的命令行开关可以满足我的需求?