今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

Ack コマンドが便利すぎて grep 使わなくなりそうな件

Google+のストリームに流れてきたポストで初回されてたこのサイトに目がとまった。

grepをよく使うプログラマはどう考えても乗り換えるべき新しいgrepコマンド「ack」:phpspot開発日誌

Ackって、そんなに便利なのん?なんて思いつつ記事を読んでたら、開発者がLTで説明してる動画があったので、見てみた。

なんだか、便利そう。いままで、ファイルの種類を指定して検索する時なんて、grep の引数に find の結果を渡したりしてたり。こんな感じで。

$ grep hoge `find . -name '*java' -print`

それがこうなる。

$ ack -java hoge

しかも検索結果はエスケープシーケンスを使って、指定したキーワードを反転表示してるから、捜し物を見つけやすい。

さっそくインストール。

ack: Installation

最初、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

パイプで接続しても動くみたいだけど、結果表示からエスケープシーケンスの効果がなくなってるなぁ。

なんか、もっとうまいやり方があるのかな?検索キーワードを除外する条件まで含めて正規表現で書けって?