パターンに一致する特定のファイル内の単語を見つけるにはどうすればよいですか。例えばversionを検索しています CMake*で 現在のディレクトリで再帰的に見つかったファイル。
承認された回答:
ファイル名と行番号を確認したい場合は、POSIXly:
find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +
(;は使用しません ここでは、1つのgrepを実行します ファイルごと)。これはGNUismの標準的な同等物です:
find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +
find (最初に)、xargs (2番目に)grepにできるだけ多くの引数を渡します コマンドに渡すことができる引数の数の制限を超えないように、可能な限り。その分割を行うと、最後の実行で1つの引数のみがgrepに渡される可能性があります。 その場合、grep ファイル名は出力されません。そのため、/dev/nullが必要です そこに(または-H GNU grepを使用 。
-type fを使用 、通常のファイルのみを考慮しています(デバイス、シンボリックリンク、パイプ、ディレクトリなどは考慮していません)。
GNUismを使用したい場合は、GNU grepを使用できます。 ディレクトリツリーを下る機能:
grep -rHnF --include='CMake*' version .
-Rを使用したくない grepが発生するため ディレクトリツリーを下るときにシンボリックリンクをたどり、デバイス、FIFO、ソケットから読み取るには…
そのバージョンはより安全で効率的ですが、移植性はありません。