fgrep
主にまたはを使用して検索を高速化および/または改善する方法を考えていますag
。and
大文字と小文字を区別せずに単語を検索し、$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
統計ag
time
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
例terdon1
とterdon3
同じように高速です。この二人に対する私の態度は大きく変わる。時間別の一部ランキングsys
(最高の基準ではない!)
- テデン1
- テデン2
- テトン3
- ムル
- 株式会社
- コマンドラインツール
略語
- 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
ack
The 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
このテストが他のテストよりはるかに遅いので、ベンチマークから除外しました。