Using an index to make grep faster?

You could copy your codebase on a RAM disk.


Full-text indexing

There are tools such as recoll, swish-e and sphinx but you'd have to check if they can support the sort of search criteria you need.

Recoll

Recoll is a personal full text search tool for Unix/Linux.

Swish-e

Swish-e is a fast, flexible, and free open source system for indexing collections of Web pages or other files.

Sphinx

Sphinx lets you either batch index and search data stored in an SQL database, NoSQL storage, or just files quickly and easily

grep

I'm surprised grep is as slow as you describe, can you reduce the number of files being searched? For example when I only need to search the source files for one executable (out of many in a project) I feed grep the names from a command that lists the source files for that program:

grep expression `sources myprogram`

sources is a program specific to my development environment but you may have (or be able to construct) something equivalent.

I'm assuming you've tried obvious techniques such as

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

I've read a suggestion that the -P option of current grep can speed up searches significantly.


what about cscope, does this match your shoes?

Allows searching code for:

  • all references to a symbol
  • global definitions
  • functions called by a function
  • functions calling a function
  • text string
  • regular expression pattern
  • a file
  • files including a file