ディレクトリ内の特定の拡張子を持つファイルのGrep


11

特定の拡張子を持つディレクトリ下のファイルでキーワードを検索できるコマンドはありますか?

文字列grep -irn "string" ./pathは、ディレクトリの下のすべてのファイルの再帰検索を提供します./path。私の特定の要件は./path、次のような拡張子を持つすべてのファイルを検索することです*.h

回答:


11

いくつかの試行の後、私grep -irn 'string' --include '*.h'はより便利だと思います


1
それを行う場合は、必ず"*.h"引用符で囲んでください。
G-Manが「Reinstate Monica」と言う

引用符の有無にかかわらず動作します
ジュヌジェイコブ

3
今ではありません。foobar.h現在のディレクトリで呼び出されるファイルを作成して、もう一度試してください。
G-Manが「Reinstate Monica」と言う

10

Sのら(オン)SHエルオプトイオンglobstarのコマンドを使用して、

    shopt -s globstar

これにより**、ファイル名コンポーネントとして、ここおよび以下すべてを意味します。つまりpath/**pathディレクトリ とそのサブディレクトリ内のすべてを意味します。(./ここに入力する必要はありません。)次に使用できます

grep -in "string" path/**/*.h

以下のすべての.hファイルを検索しますpath


あなたは、することができますuが持つオプションをNSET shopt -u



3

マシンに何かをインストールできる場合は、ackを使用することをお勧めします。

必要なことを正確に行うことができます。ユースケースでは、次のことができます。

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hhhファイルをフィルターします
  • -iは大文字小文字を無視します

ネイティブにサポートされているファイルフィルターを見つけるには、コマンドを実行しack --help=typeます。


ackの元のクローンであるagもあります。以前は、それらの機能セットはそれ以降いくらか分岐しているためです。
8ビットツリー

私はagを知りませんでした。共有してくれてありがとう。
西暦

3

これはどうですか?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

説明:

  • -L:シンボリックリンクをたどる
  • -name:アスタリスクを使用して、拡張子を記述できます
  • -in:提案と同じですが、「r」はfindコマンドに置き換えられます
  • {}:これはfindコマンドの結果を表します
  • \; :あなたが結合する場合にfindして-exec、これは、エンド・オブ・コマンド指定子です

1
どのように機能し"*.h"ますか?私はそれが必要であると思っていたでしょう'*.h'
ジョー

私は常に二重引用符を使用しますが、違いはないと思います。
ドミニク

0

gnu grepを使用している場合は、希望どおりの動作をするフラグがあります。

grep -irn --include=\*.h "string" path

他のgrepsで利用できるとは思わないが。

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