web-dev-qa-db-ja.com

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

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

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

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

10
prosseek

シェルが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 {} +

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

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

ack --csharp GetTypes
8
Caleb

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

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

findの場合、.をディレクトリで置き換え、-nameを削除して、すべてのファイルを調べることができます。

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

4
Kevin

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

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

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

4
maxschlepzig