Grep、警告を無視


50

特定のパッケージのインストールディレクトリを見つけようとしています。特定のファイルを見つけようとしている特定のキーワードがあります。

grepの実行中に、cppまたはhファイルタイプのみを含めます。私は表示するためにはgrepをしたくないの警告のような権限拒否したり ディレクトリを見つけることができませんでした。一致したファイルのみを表示したいだけです。どうすればこれを行うことができますか?

現在、私は使用しています

grep "My term" -ir --exclude-dir="\.svn" --include=*.{cpp,h} ./

回答:


56

これらの警告はstderr、標準出力ファイル記述子ではなく、ストリームに向けられます。2>/dev/nullコマンドの最後に追加することにより、stderrの出力を停止できます。


より具体的にfind . 2>/dev/null | grep 404.htmlは、コマンドがどのようになるかです
-csga5000

30

警告をフィルタリングするよりも直接、以下を追加することで無効にできます-s

grep "My term" -sir --exclude-dir="\.svn" --include=*.{cpp,h} ./

このオプションにはいくつかの互換性の問題があります。ただし、これは個人的な使用では問題になりません。

-s、-no-messages:存在しない、または読み取り不能なファイルに関するエラーメッセージを抑制します。移植性に関する注意:GNU grepとは異なり、7th Edition Unix grepはPOSIXに準拠していませんでした。これは、-qがなく、-sオプションがGNU grepの-qオプションと同様に動作したためです。USGスタイルのgrepにも-qがありませんでしたが、その-sオプションはGNU grepのように動作しました。ポータブルシェルスクリプトは、-qと-sの両方を避け、代わりに標準出力とエラー出力を/ dev / nullにリダイレクトする必要があります。(-sはPOSIXで指定されます。)


13.04をインストールしたところ、12.04では得られなかったエラーが発生しています。何かが変わったのでしょうか?ほとんどの場合気にしないので、grepがファイルがディレクトリであるという警告を停止するのはクールだと思いました!
アレクシスウィルク

すみません、私はまだ12.10にいるので、これを確認することはできません。
セバスチャンvom Meer

5

私はこのような多くの迷惑なメッセージを取得していました。

grep: commands: Is a directory
grep: events: Is a directory
grep: views: Is a directory

理由は、--directoriesフラグがデフォルトに設定されているからreadです。に変更しましたrecurse。再帰的な検索を自動的に実行したくない場合は、skip代わりに使用できます。

これを常に処理する最も簡単な方法は、環境変数に設定することです。中~/.bash_profileまたは~/.bashrcご使用のディストリビューションに応じて:

export GREP_OPTIONS='--directories=recurse'

現在、grepを使用するたびに、これらのメッセージが自動的に抑制されます。

もう1つのオプションは、--no-messagesフラグshorthand -sです。これによりIs a directoryメッセージも削除されますが、より便利な他のメッセージも抑制されます。たとえば、ネストされた検索を実行していて、*/*/*そのパターンのそのようなファイルが存在しない場合、それはわかりません。


良いexplanaition
ALDR

1

grep再帰的に行う代わり-ir に、findコマンド(デフォルトでは再帰的)に-readableフラグとパスでアクセス許可を処理させ、フラグで除外し-not -path "*.svn*"てからファイルをに渡すという方法がありますgrep。ディレクトリの除外は、-type f通常のファイルのみを見つけるために行われます。

$ find . -not -path "*.svn*" -type f -name "*.cpp" -or -name "*.h"  -readable -exec grep "my terms" "{}" \; 

0

特定のファイルで再帰検索を実行する場合、を使用するほうがはるかに適切ack-grepです。ここの構文は次のとおりです。

ack-grep -i "My term" --cpp --h

アクセス許可エラーメッセージを削除するには、次のコマンドを使用して同じコマンドを実行できますsudo

ack-grep -i "My term" --cpp --h

しかし、最終的に、インストール済みパッケージを検索する場合は、これらのさまざまなオプションを確認してくださいhttps : //www.google.com/search?q=ubuntu%20search%20inside%20installed%20packages

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.