grep で再帰的に検索する方法
grep で再帰的に検索する方法
ある関数を呼び出しているソースファイルを探したい。
でもソースファイルは複数のディレクトリに保存されていて、ディレクトリごとに grep 検索するのは面倒。
そんなときはファイルを再帰的に検索すると楽できます。
ディレクトリ内のファイルを再帰的に検索するには、次の3つの方法があります。
- grep コマンドの -r オプションを使う
- find と xargs コマンドを組み合わせて grep コマンドを使う
- grep コマンドで glob パターンを使う
-r オプションを使う
grep コマンドに -r オプションを付けて実行すると、再帰的に検索するようになります。
たとえば現在のディレクトリおよびサブディレクトリにあるファイルから “printf” を探すには以下のようにします。
grep -r "printf" .
find と xargs を使う
ところがうちの grep のオプションには -r がありませんでした。
grep: illegal option -- r とのことです。
そんなときは次のように find と xargs を使って対処します。
find . -type f | xargs grep "printf"
-name オプションでパターンの指定もできます。
たとえばC言語のファイルに限定する場合は、以下のように拡張子を指定します。
find . -type f -name "*.c" | xargs grep "printf"
glob パターンを使う
glob パターンを使って検索する手もあります。
この場合は -r オプションを付けなくて OK です。
(-r オプションのない grep でも使えます)
grep "printf" ./**/*.c
まとめ
grep に -r オプションがなくてもあきらめることはありません。
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。
この記事にコメントをしてみませんか?