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

gle*_*eba 14 unix linux 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
Run Code Online (Sandbox Code Playgroud)

我试过这个:

grep -irl "foo" . | grep -v "Permission denied"
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

 grep -irl "foo" . | grep -v "^grep:"
Run Code Online (Sandbox Code Playgroud)

最后这一个:

 grep -irl "foo" . | grep "^./"
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你提前!:)

mhc*_*hck 30

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

grep -irls "foo"
Run Code Online (Sandbox Code Playgroud)

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

-s, --no-messages

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

  • 记住这一点的一个技巧是,您正在寻找名为“foo”的“女孩”:grep -irls“foo” (8认同)
  • 我认为这是满足要求的更好答案。您可以在官方文档中搜索 -s 标志[链接](https://www.gnu.org/software/grep/manual/grep.html) (3认同)

Lua*_*tel 18

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

grep -irl "foo" 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

要了解有关重定向的更多信息(在bash上),请阅读本文: Bash参考手册 - 重定向