いまさら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
で特定のディレクトリを無視
何かおかしかったら元のやつ使って、状況に応じて使い分ければ良いと思う