サブディレクトリ内の特定のファイルでのみ文字列を検索します


10

関数GetTypes()をすべてのC#ソースファイル(.cs)のディレクトリ/サブディレクトリで見つける必要があるとしましょう。

を使用grep -rn GetTypes *.csしましたが、でエラーが発生しましたgrep: *.cs: No such file or directory。を使用する必要grep -rn GetTypes *がありましたが、この場合は、すべてのファイルが表示される*.csだけでなく、

.csファイル内でのみ文字列を検索するには、どのコマンドを使用する必要がありますか?


回答:


12

シェルがbash≥4の場合は、に入れshopt -s globstarます~/.bashrc。シェルがzshであれば、問題ありません。その後、実行できます

grep -n GetTypes **/*.cs

**/*.cs*.cs現在のディレクトリまたはそのサブディレクトリで再帰的に一致するすべてのファイルを意味します。

サポートしているシェルを実行していない**が、grepはサポートしている--include場合、再帰的なgrepを実行して、grep特定のパターンに一致するファイルのみを考慮するように指示できます。ファイル名パターンを囲む引用符に注意してください。これは、シェルではなくgrepによって解釈されます。

grep -rn --include='*.cs' GetTypes .

ポータブルツール(一部のシステムにはまったくないgrep -r)のみを使用findして、ディレクトリトラバーサル部分とgrepテキスト検索部分に使用します。

find . -name '*.cs' -exec grep -n GetTypes {} +

globstar現在のBash 4+シェルのオプションを一時的に設定するには、次を使用しますshopt -s globstar
tjanez 2017

8

として知られているビリアントの小さなgrep / find置換をチェックアウトする必要がありますack。これは特に、ソースコードファイルのディレクトリを検索するための設定です。

コマンドは次のようになります。

ack --csharp GetTypes

4

GNUを使用する場合grep、再帰的なディレクトリトラバーサルに含めるファイルを指定できます。

grep --include '*.cs' -rn GetTypes .

(最後のピリオドは、トラバーサルのルートとしての現在の作業ディレクトリを示します)


4

私はfindとgrepの組み合わせを使用しています:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

の場合find、すべてのファイルを調べたい場合は.、ディレクトリに置き換えて削除-nameできます。

の場合grep-bnは位置と行番号を出力し、--color探しているものを強調表示して目を助けます。

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