这是我在这里的第一个问题,所以我要努力清楚,对不起我的英语。
所以,问题是,我在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 "^./"
但我一直得到相同的结果,好像我没有在|,任何想法之后放任何东西?我错过了什么?
提前非常感谢! :)
答案 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指定。)