$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

git grep -Cなんてオプション知らなかった...

git grepの-Cってオプションを初めて知った。

-<num>, -C <num>, --context <num>
    Show <num> leading and trailing lines, and place a line containing -- between contiguous groups of matches.

マッチした行の上下指定行数を表示してくれるらしい。例えばemacsでdefgroupどうやって定義しているのかなって知りたかったら

git grep -C 2 -e defgroup

とすると、以下のようにぱっと見で使えるデータが返ってくる。便利。
f:id:shiba_yu36:20130126204912p:plain


それ以外にもいろいろgit grepにはオプションがあった。--and, --or, --not, -eを使って、うまく検索してあげる事も出来る。このあたりはエンジニアだったら指定は分かりやすいかも。

# require と anythingの両方を含む行
git grep -e require --and -e anything

# require と anythingのどちらかを含む行
git grep -e require --or -e anything

# anythingは含むけど、requireは含まない行
git grep -e anything --and --not -e require

# anythingを含む行で、かつ、moccurかctagsのどちらかを含む行
git grep -e anything --and \( -e moccur --or -e ctags \)


あと-nをつけてあげると、git grepで検索された行の、ファイルにおける行番号も見れる。これはgrep.lineNumberをtrueにしておいてあげると

git config --global grep.lineNumber true


さらに-EをつけてあげるとPOSIX extended regexpで検索をかけられる。数字にマッチさせるには

git grep --extended-regexp -e "[0-9]+"

さらに-Pをつけてあげるとperl regexpで検索できる。しかしUSE_LIBPCREをつけて、perlコンパイルしないといけないので、面倒で使ってない。

いろいろべんりですね。