web-dev-qa-db-ja.com

「grep」からすべての「permission denied」結果行を除外するにはどうすればよいですか?

これが私の最初の質問ですので、はっきりさせようと思います。

つまり、私は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 "^./"

ただし、|の後に何も付けなかった場合と同じ結果が得られますか?何が欠けていますか?

よろしくお願いします! :)

20
gleba

表示されているメッセージは、これらのファイルに対する権限の不足によるものです。つまり、これらはエラーメッセージです。
次のように、stderr(標準エラー出力)を/dev/nullにリダイレクトするだけです。

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

(bashでの)リダイレクトの詳細については、次の記事を参照してください。 Bashリファレンスマニュアル-リダイレクト

Edit:次のコマンドを使用して、エラーメッセージを抑制することもできます。

grep -irl "foo" 2>&-
17
Luana Pimentel