簡體   English   中英

如何從“grep”中排除所有“permission denied”結果行?

[英]How can I exclude all “permission denied” result lines from “grep”?

所以,問題是,我在使用 grep 命令的 linux 終端上,我希望輸出沒有在開頭打印的所有行“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 "^./"

但是我一直得到相同的結果,就好像我沒有在 | 之后放任何東西一樣,有什么想法嗎? 我錯過了什么?

您收到的消息是由於缺乏對這些文件的權限,即那些是錯誤消息。
您所要做的就是將stderr (標准錯誤輸出)重定向到/dev/null ,如下所示:

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

要了解有關重定向的更多信息(關於 bash),請閱讀這篇文章: Bash 參考手冊 - 重定向

編輯:您也可以通過使用來抑制錯誤消息:

grep -irl "foo" 2>&-

我更喜歡使用 -s 'suppress' 標志:

grep -irls "foo"

請注意 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 指定。)

離開你的第一次嘗試:

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

您只是缺少重定向標准錯誤的運算符。 '|' 重定向標准輸出。 如果您添加“&”,您還將重定向標准錯誤,這就是給您“權限被拒絕”消息的原因。 嘗試:

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

這對我有用,因為出於某種原因我的機器不喜歡“2> /dev/null”選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM