47
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

いまさら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 で特定のディレクトリを無視

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
47
Help us understand the problem. What are the problem?