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

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

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

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

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

答え1

シェルがbash≥4の場合は、shopt -s globstarシェルを変更してください~/.bashrc。シェルがzshの場合は問題ありません。だからあなたは実行することができます

grep -n GetTypes **/*.cs

**/*.cs*.cs現在のディレクトリまたはそのサブディレクトリで繰り返し一致するすべてのファイルを表します。

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

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

grep -rfindディレクトリナビゲーション部分とgrepテキスト検索部分にはポータブルツール(一部のシステムにはまったくないツール)のみを使用してください。

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

答え2

すばらしい小さいgrep/findの取り替えを確かめなければなりません。ack。特に、ソースコードファイルのディレクトリを検索するために使用されます。

あなたのコマンドは次のとおりです。

ack --csharp GetTypes

答え3

GNUを使用している場合は、grep再帰ディレクトリナビゲーションに含めるファイルを指定できます。

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

(最後のピリオドは、巡回用のルートディレクトリとして現在の作業ディレクトリを表します。)

答え4

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

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

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

の場合、grep位置-bnと行番号が印刷され、探して--colorいる内容を強調表示して目に役立ちます。

関連情報