web-dev-qa-db-ja.com

インデックスを使用してgrepを高速化しますか?

同じコードベースを何度もgrepしていることに気づきました。うまく機能しますが、各コマンドは約10秒かかるので、もっと速くする方法を考えています。

では、grepはある種のインデックスを使用できますか?インデックスはおそらく複雑な正規表現には役立たないことは理解していますが、私は主に非常に単純なパターンを使用しています。この場合、インデクサーは存在しますか?

編集:ctagsなどについては知っていますが、全文検索をしたいと思います。

10
Peltier

cscope はどうですか、これはあなたの靴と一致しますか?

次のコードを検索できます。

  • シンボルへのすべての参照
  • グローバル定義
  • 関数によって呼び出される関数
  • 関数を呼び出す関数
  • テキスト文字列
  • 正規表現パターン
  • ファイル
  • ファイルを含むファイル
4
akira

全文索引付け

recollswish-esphinx などのツールがありますが、それらがあなたの検索条件の種類をサポートできるかどうかを確認する必要があります必要。

Recoll

Recollは、Unix/Linux用の個人用全文検索ツールです。

Swish-e

Swish-eは、Webページやその他のファイルのコレクションにインデックスを付けるための、高速で柔軟性のある無料のオープンソースシステムです。

スフィンクス

Sphinxを使用すると、SQLデータベース、NoSQLストレージ、またはファイルのみに保存されているデータのバッチインデックス作成と検索をすばやく簡単に行うことができます。

grep

Grepがあなたが説明するのと同じくらい遅いことに驚いていますが、検索されるファイルの数を減らすことはできますか?たとえば、(プロジェクト内の多くの実行可能ファイルのうち)1つの実行可能ファイルのソースファイルのみを検索する必要がある場合、そのプログラムのソースファイルを一覧表示するコマンドからgrepに名前をフィードします。

grep expression `sources myprogram`

sourcesは私の開発環境に固有のプログラムですが、同等のものがある(または構築できる)可能性があります。

私はあなたが次のような明白なテクニックを試したことがあると思います

find /foo/myproject -name "*.c" -exec fgrep -l searchtext

suggestion を読みましたが、現在のgrep-Pオプションを使用すると検索を大幅に高速化できます。

4
RedGrittyBrick

grep、いいえ。しかし、インデックスを使用し、コードベースを対象としたプログラムがいくつかあります。 ctags(vimで提供されるバージョンがあります)、etags(emacsでの使用を目的としています)、global(エディターからより独立しています)は私が考えているものです今頃ですが、おそらく他にもあります。

3
AProgrammer

コードベースをRAMディスクにコピーできます。

3
jfg956

全文検索エンジンを使用したい場合..次のいずれかを使用します。

2
akira