目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

grepのメモメモ

自分メモ

再帰的に検索

"-r"または"--recursive"オプションを使います。というかデフォルトの挙動が再帰的だといろんな場面で便利なので.zshrcに"GREP_OPTIONS=--directories=recurse"とか書いておくと良いです。

grep -r hoge *

結果を色づけする

"--color"オプションを使うべし。これも.zshrcに"--color=auto"とか入れておくと良いんじゃないですかね。

grep --color hoge *

マッチした行数を表示する

"-n" または"--line-number"オプションを使います。

grep -rn hoge *

単語または行単位でマッチしたものを表示する

単語単位なら"-w"、"--word-regexp"オプション、行単位なら"-x"、--line-regexpオプションを使います。メソッド名で検索する時"-w"を付けておくとノイズが混じらなくて良いかもです。

grep -rx "hoge is hoge." *
grep -rw hoge *

マッチしたファイル名のみを表示する

"-l"または"--files-with-matches"オプションを使います。逆にマッチしなかったファイル名を表示するには"-L"または"--files-without-match"オプションを使います。"wc -l"と組み合わせればファイル数を数えられるので使える場面があるのかも。

grep -rl hoge * | wc -l
grep -rL hoge * | wc -l

wordがマッチした行数を数える

"-c"または"--count"オプションを付けるとファイル毎にマッチした数をカウントしてくれます。

grep -rc hoge *

awkに喰わせてあげれば、プロジェクト全体でいくつあるかを数えてくれます。
ちなむと"-h"、"--no-filename"オプションはファイル名を表示させないオプション。最初何に使うのかよく分かりませんでしたが、パイプにつなぐ際に出力を調整できるとやりやすいですね。

grep -rch hoge * | awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'

一致しない行を表示する。

"-v"オプションを使います。絞り込みの時とかに使います。

grep -r hoge * | grep -v foo

こんな感じ。あまり良い例が思い浮かばなかった。