パターンに一致する特定のファイル内の単語を見つけるにはどうすればよいですか。例えば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、ソケットから読み取るには…
そのバージョンはより安全で効率的ですが、移植性はありません。