fgrep / Agで検索を高速化する方法は?

fgrep / Agで検索を高速化する方法は?

fgrep主にまたはを使用して検索を高速化および/または改善する方法を考えていますagand大文字と小文字を区別せずに単語を検索し、$HOME一致リストを次にリダイレクトするコード。vim

find -L $HOME -xtype f -name "*.tex" \
   -exec fgrep -l -i "and" {} + 2>/dev/null | vim -R -

ag並列性とack

find -L $HOME -xtype f -name "*.tex" \
   -exec ag -l -i "and" {} + 2>/dev/null | vim -R -

統計資料

グループ平均fgrep統計agtime

        fgrep   ag     terdon1  terdon2  terdon3  muru 
user    0.41s   0.32s  0.14s    0.22s    0.18s    0.12s
sys     0.46s   0.44s  0.26s    0.28s    0.30s    0.32s

terdon1terdon3同じように高速です。この二人に対する私の態度は大きく変わる。時間別の一部ランキングsys(最高の基準ではない!)

  1. テデン1
  2. テデン2
  3. テトン3
  4. ムル
  5. 株式会社
  6. コマンドラインツール

略語

  • terdon1 = terdon-many-find-grep
  • terdon2 = terdon-many-find-fgrep
  • terdon3 = terdon-many-find-ag (FがないためFがないag

その他のコード

コメントのムルの提案

grep -RFli "and" "$HOME" --include="*.tex" | vim -R -

オペレーティングシステム:Debian 8.5
ハードウェア:ASUS Zenbook UX303UA

ベストアンサー1

ackThe Silver Searcher( ) を使用しているので、ag他のツールを使用しても構いません。

この領域の新しいツールはripgrep(rg)です。すばやく設計されています発見する検索するファイル(たとえばag)も高速です。探すファイル自体(普通の古いGNUのようなgrep)。

お客様の質問については、次のように使用できます。

rg --files-with-matches --glob "*.tex" "and" "$HOME"

ripgrepの著者公開された詳細分析さまざまな検索ツールの仕組みとベンチマークの比較。

ベンチマークの一つは、linux-literal-casei、あなたが説明する仕事にやや似ています。多数のネストされたディレクトリ(Linuxコードベース)から複数のファイルを検索して、大文字と小文字を区別しない文字列リテラルを検索します。

このベンチマークでは、rgホワイトリスト(例:「* .tex」など)を使用するときに最も高速です。このucgツールはこのベンチマークでも優れたパフォーマンスを発揮します。

rg (ignore)         0.345 +/- 0.073 (lines: 370)
rg (ignore) (mmap)  1.612 +/- 0.011 (lines: 370)
ag (ignore) (mmap)  1.609 +/- 0.015 (lines: 370)
pt (ignore)        17.204 +/- 0.126 (lines: 370)
sift (ignore)       0.805 +/- 0.005 (lines: 370)
git grep (ignore)   0.343 +/- 0.007 (lines: 370)
rg (whitelist)      0.222 +/- 0.021 (lines: 370)+
ucg (whitelist)     0.217 +/- 0.006 (lines: 370)* 

* - 最高の平均時間。 + - 最適なサンプリング時間。

著者は、ackこのテストが他のテストよりはるかに遅いので、ベンチマークから除外しました。

おすすめ記事