高速化したGNU grepをインストールする
という記事と、そこで引用されている
いまさらgrepが10倍高速化したのはなぜか
を読んでいたところ、以下のような記述がありました。
そこで発想を変えて、検索される文字列を同値な正規表現にあらかじめ変換すると速くなった。
つまり「foo」という文字列を検索するときは「[fF][oO][oO]」という正規表現に変換してから検索する。
「あれ、つまり旧バージョンのGNU grepでも-iのかわりに正規表現指定すれば速くなるんじゃね?」と思い、試
してみた結果が以下になります。
grepのバージョンは2.5.1です。
$ grep --version
egrep (GNU grep) 2.5.1
適当なファイル群を大文字小文字を問わない「test」で検索した結果が以下です。
$ time grep -r -i test * | wc -l
60929
real 0m15.540s
user 0m8.221s
sys 0m7.295s
$ time grep -r [tT][eE][sS][tT] * | wc -l
60929
real 0m7.295s
user 0m6.519s
sys 0m0.616s
他にも何パターンか試してみましたが、大体半分程度まで処理時間が短縮されました。
長い文字列だと投入自体が面倒となるかもしれませんが(bashrcに関数記載で上手く処理出来れば良いですが)、既に構築済みの環境等で今更grepのバージョンアップをするのも…でも大文字小文字区別なしでの検索を実施してて処理時間が…、というような稀にある?環境では何かの役に立つかと思われます。