高速化したGNU grepをインストールする

  • 37
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

いまさらgrepが10倍高速化したのはなぜか を見て
MacOSXで使えるかやってみた(Snow Leopardの頃から使っているMacBookPro)

続きで特定の条件下(UTF-8以外)では遅いというのもあった
10倍速くなったと思ったら今度は200倍遅くなっていた

現在使っているgrepの確認

$ which grep
/usr/bin/grep
$ grep --version
grep (BSD grep) 2.5.1-FreeBSD

速いらしいバージョンは2.17

brewでgrepをインストール

普段brewを使っている場合はbrewでインストールする

参考にした情報

# brewを最新にする
$ brew update

# インストールの準備
$ brew tap homebrew/dupes
Cloning into '/usr/local/Library/Taps/homebrew-dupes'...

# grepのインストール
$ brew install homebrew/dupes/grep
==> Installing grep
==> Downloading http://ftpmirror.gnu.org/grep/grep-2.17.tar.xz
...
/usr/local/Cellar/grep/2.17: 14 files, 960K, built in 43 seconds

# インストール後の確認
$ /usr/local/Cellar/grep/2.17/bin/ggrep --version
/usr/local/Cellar/grep/2.17/bin/ggrep (GNU grep) 2.17
$ which ggrep
/usr/local/bin/ggrep

コマンドはggrepだった

エイリアス

コマンドを古いgrepと置き換えたい場合は、エイリアスなり、シンボリックリンクなり、PATHの変更をすると良い

ベンチマーク(性能比較)

$ time grep ...$ time ggrep ...
をある同じ条件で比較したところ数回の試行で
およそ 3min22sec vs 44sec で数倍速かった

LANG=C

$ LANG=C grep ... でも速くなるのは以前試した
併用して速くなったかは良くわからなかった

他高速化オプション

-i 大文字と小文字の区別をなくす
-I でバイナリファイルを無視して検索
--exclude-dir=PATTERN で特定のディレクトリを無視

何かおかしかったら元のやつ使って、状況に応じて使い分ければ良いと思う