Ack コマンドが便利すぎて grep 使わなくなりそうな件
Google+のストリームに流れてきたポストで初回されてたこのサイトに目がとまった。
≫grepをよく使うプログラマはどう考えても乗り換えるべき新しいgrepコマンド「ack」:phpspot開発日誌
Ackって、そんなに便利なのん?なんて思いつつ記事を読んでたら、開発者がLTで説明してる動画があったので、見てみた。
なんだか、便利そう。いままで、ファイルの種類を指定して検索する時なんて、grep の引数に find の結果を渡したりしてたり。こんな感じで。
$ grep hoge `find . -name '*java' -print`
それがこうなる。
$ ack -java hoge
しかも検索結果はエスケープシーケンスを使って、指定したキーワードを反転表示してるから、捜し物を見つけやすい。
さっそくインストール。
最初、MacPortでインストールしようとしたら port の実行に失敗して、port selfupdate も失敗した。とりあえず port が動くように対策。
【対処方法】
xcodeを起動 -> xcode -> Preference -> Downloadsタブ -> "CommandLineTools" をinstall
≫sudo port selfupdate でError停止してしまった場合の対処方法 - BugDigの日記
port は動くようになったけど、なぜかインストールに失敗。
$ sudo port "perl/p5-app-ack"
Install the ack executable に書かれてる、curl によるインストールでサクッとインストールできた。
$ curl http://beyondgrep.com/ack-2.04-single-file > ~/bin/ack && chmod 0755 !#:3
環境変数 PATH に ~/bin を追加するために、~/.bash_profile を編集して、編集後に読み込む。
$ vi .bash_profile $ source !$
これで ack コマンドが使えるようになった。
クラウドのサーバーにもインストールしようっと。
そういえば、検索結果から特定のキーワードを除外するのもできるのかなー、とか思って試してみた。-grep と同様に、-vオプションで除外できる。
$ ack --java Datastore | ack -v query
パイプで接続しても動くみたいだけど、結果表示からエスケープシーケンスの効果がなくなってるなぁ。
なんか、もっとうまいやり方があるのかな?検索キーワードを除外する条件まで含めて正規表現で書けって?