このページの内容

2.10 内容

ファイルの内容に基づいて検索するには、grepを使えます。たとえば、現在のディレクトリにあるCのソースファイルのうち、文字列「thing」を含むものを調べるには、次のようにします。

grep -l thing *.[ch]

サブディレクトリのファイルからも文字列を検索したい場合は、grep、find、xargsを次のように組み合わせられます。

find . -name '*.[ch]' | xargs grep -l thing

「-l」を指定すると、grepは文字列を含む行ではなく、そのファイルの名前だけを表示します。文字列の引数「thing」は、実際には正規表現なので、メタ文字を含められます。この方法を少し改善するには、「-r」で、findが何も出力しない場合にxargsがgrepを実行しないようにし、findの「-print0」アクションとxargsの「-0」オプションで、名前にスペースを含むファイルが誤解釈されるのを防ぎます。

find . -name '*.[ch]' -print0 | xargs -r -0 grep -l thing

内容がパターンに一致するファイルを検索する方法について、より詳しくはgrepのマニュアルページを参照してください。