如何从“grep”中排除所有“权限被拒绝”的结果行?

时间:2016-03-15 16:05:41

标签: linux unix permissions grep

这是我在这里的第一个问题,所以我要努力清楚,对不起我的英语。

所以,问题是,我在linux终端上使用grep命令,我希望输出没有在开头打印的所有行“grep:”或以“./”开头的行,因为现在我得到这样的东西:

grep: ./users/blabla1: Permission denied
grep: ./users/blabla2: Permission denied
grep: ./users/blabla3: Permission denied
grep: ./users/blabla4: Permission denied
grep: ./users/blabla5: Permission denied
grep: ./users/blabla6: Permission denied
grep: ./users/blabla7: Permission denied
grep: ./users/blabla8: Permission denied
./foo/bar/log.log
./foo/bar/xml.xml

我试过这个:

grep -irl "foo" . | grep -v "Permission denied"

我也试过这个:

 grep -irl "foo" . | grep -v "^grep:"

最后这一个:

 grep -irl "foo" . | grep "^./"

但我一直得到相同的结果,好像我没有在|,任何想法之后放任何东西?我错过了什么?

提前非常感谢! :)

2 个答案:

答案 0 :(得分:12)

您收到的邮件是由于对这些文件缺乏权限,即那些是错误消息。
您所要做的就是将stderr(标准错误输出)重定向到/dev/null,如下所示:

grep -irl "foo" 2> /dev/null

要了解有关重定向的更多信息(在bash上),请阅读以下文章: Bash Reference Manual - Redirections

答案 1 :(得分:0)

我更喜欢使用-s'suppress'标志:

grep -irls "foo"

请注意grep手册页中的“可移植性说明”:

  

-s,-无消息

     

禁止显示有关不存在或不可读文件的错误消息。可移植性说明:与GNU grep不同,第七版Unix grep不符合POSIX,因为它缺少-q且其-s选项的行为类似于GNU grep的-q选项。 USG风格的grep也缺少-q,但其-s选项的行为类似于GNU grep。可移植的shell脚本应避免同时使用-q和-s,而应将标准和错误输出重定向到/ dev / null。 (-s由POSIX指定。)