私が主観で覚えやすいと感じたものは、☆マークをたくさん付けます(1個から5個)。紹介するオプションは覚えやすさのために最小限になるよう心がけました。
ファイル検索コマンド「grep」とは
grepとは、Mac OSやLinuxなどのUNIX互換OSであれば柔軟にファイルを検索できる便利なコマンドです。「グレップ」と呼びます。プログラマ同士の動詞として使われることもあります。たとえば「どこかのファイルに"test"が含まれないかどうかgrepして」というような具合です。
このgrepコマンドは、ターミナル上から打ち込むものですが多機能さ故に、使い方を忘れてしまうことが多々あるので、私のメモもかねていくつかgrepの方法をまとめます。
特定のパターンを含むファイルを探す方法の一覧。
簡単のため特定のディレクトリは、カレントディレクトリ(./
)とします。
grepコマンドの例 【覚えやすさ ☆☆☆☆】
grepに再帰的に検索するオプションと検索文字列のパターンを渡します。
grep-r'検索文字列' ./
オプション | 意味 |
---|---|
-r | 検索ディレクトリを再帰的に検索します。Recursiveの略です。 |
git grepコマンドの例 【覚えやすさ ☆☆☆☆☆】
gitで管理しているファイルであればgit-grepサブコマンドが便利です。
git grep'検索文字列'
findコマンドとgrepコマンドを組み合せる方法 【覚えやすさ ☆☆☆】
検索条件を細かくしたい場合は、findコマンドと組み合わせられます。
find ./ -type f -execgrep'検索文字列'{} +
オプション | 意味 |
---|---|
-type f | 検索対象をファイルであることを指定します。f はFileの略です。 |
-exec | find コマンドの結果すべてに適用するコマンドを指定します。 |
-exec
オプションと置換文字列{}
には、ファイル名を引数として受けるコマンド(今回の例でいうとgrep
)を指定します。置換文字列{}
前後には空白が必要です。grep
側から見ると置換文字列 {}
の部分にそれぞれの引数が渡ってくるイメージです。
-exec
オプションで指定したコマンドに、どのようにファイル名を渡すかトークン+
で指定します。トークン+
で指定した場合は、find
の検索結果が一つの結果として置換文字列{}
に挿入されます。つまり grep
コマンドの呼び出し回数は一回だけです。
もし終端が次のように トークン\;
となっていれば結果の数だけ grep
コマンドが呼び出されます。
find ./ -type f -execgrep'検索文字列'{}\;
xargsを使う方法 【覚えやすさ ☆☆】
xargsコマンドを使ってfindコマンドとgrepコマンドを組み合せます。
find ./ -type f | xargs grep'検索文字列'
特定のパターンを含むファイルを探す、という目的では、grepコマンドの例で十分ですが、xargsは、パイプラインを上手に使う上で便利なので慣れておくと良いです。
vimgrep 【覚えやすさ ☆☆】
vimの:vimgrepコマンドを使えば、vim上で特定のパターンを含むファイルを探せます。vimに慣れていれば10分ほどで使い方を覚えられると思います。使い方に関しては秀逸な記事、 vimgrepとQuickfix知らないVimmerはちょっとこっち来い - Qiitaがあるのでそちらを読んでください。