grep のラッパーで、よく使うパターンを入力しなくて済むようにするツールです。
私は grep を よく 使います。コードベースを監査するとき、meg の出力を見るとき、あるいは一般的に大量のデータを扱うときなどです。次のようなかなり複雑なパターンをよく使うことになります:
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
これをすべてタイピングするのは本当に間違えやすいですし、結果が得られない場合、それは見つけるものがなかったのか、それともパターンの書き方を間違えたのか、あるいはフラグを間違って選んだのかを判断するのは難しいことがあります。
私は gf を、いつも使うパターンとフラグの組み合わせに名前を付けるために作りました。つまり、上記のコマンドは単純に次のようになります:
▶ gf php-sources
パターン定義は ~/.gf に、バージョン管理下に置ける小さな JSON ファイルとして保存されます:
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
パターンの長さと複雑さを少し減らすために、複数のパターンのリストを指定することもできます:
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
examples ディレクトリには、さらにいくつかのサンプルパターンファイルがあります。
-save フラグを使うと、コマンドラインからパターンファイルを作成できます:
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
オートコンプリート用のスクリプトが同梱されているので、'tab' キーを押すと選択肢が表示されます:
▶ gf <tab>
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
オートコンプリートを機能させるには、.bashrc などで gf-completion.bash ファイルを source する必要があります:
source ~/path/to/gf-completion.bash
オートコンプリートを機能させるには、autoload -U compaudit && compinit を使用するか、.zshrc に記述してオートコンプリートを有効にする必要があります(oh-my-zsh を使用している場合は不要です)。
次に、.zshrc などで gf-completion.zsh ファイルを source します:
source ~/path/to/gf-completion.zsh
注意:oh-my-zsh などを使用している場合、gf が git fetch のエイリアスになっていることがあります。gf バイナリを別の名前にエイリアスするか、unalias gf で git fetch のエイリアスを削除してください。
grep のより良い代替となり得る素晴らしいコード検索エンジンがいくつかあります。良い例は the silver searcher です。これは高速で(はるかに高速)、結果をより視覚的にわかりやすい方法で表示します。別のエンジンを利用するには、該当するパターンファイルに engine: <other tool> を追加します:
# grep の代わりに the silver searcher を aws-keys パターンで使用する:
# 1. "ag" エンジンを追加
# 2. ag には関係ない E フラグを削除
{
"engine": "ag",
"flags": "-Hanr",
"pattern": "([^A-Z0-9]|^)(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}"
}
aws-keys.json ファイルからフラグ E を削除する必要があります。Go がインストールされ設定されていれば、gf は次のようにインストールできます:
▶ go get -u github.com/tomnomnom/gf
go get でインストールした場合は、次のようにして .bashrc にオートコンプリートを設定できます:
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
変更を反映するには、ターミナルを再起動するか、source ~/.bashrc を実行する必要があることに注意してください。
すぐに使い始めるには、次のようにサンプルのパターンファイルを ~/.gf にコピーできます:
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
私が例として含めた個人的なパターンは、あなたにはあまり役に立たないかもしれませんが、それでも参考になる程度のものだと思います。
実は、新しいパターンファイルが最も歓迎されます! 定期的に grep で検索するものがあるなら、遠慮なく PR を出して examples ディレクトリに新しいパターンファイルを追加してください。
バグ修正もいつでも歓迎します :)