10

Я обнаруживаю, что снова и снова повторяю одну и ту же кодовую базу. Хотя это прекрасно работает, каждая команда занимает около 10 секунд, поэтому я думаю о том, как сделать это быстрее.

Так может ли grep использовать какой-то индекс? Я понимаю, что индекс, вероятно, не поможет сложным регулярным выражениям, но я использую в основном очень простые шаблоны. Существует ли индексатор для этого случая?

РЕДАКТИРОВАТЬ: я знаю о ctags и тому подобное, но я хотел бы сделать полнотекстовый поиск.

6 ответов6

4

Полнотекстовая индексация

Существуют такие инструменты, как recoll, swish-e и sphinx, но вам нужно проверить, могут ли они поддерживать необходимый вам критерий поиска.

Recoll

Recoll - это личный инструмент полнотекстового поиска для Unix/Linux.

Swish-е

Swish-e - это быстрая, гибкая и бесплатная система с открытым исходным кодом для индексации коллекций веб-страниц или других файлов.

сфинкс

Sphinx позволяет вам быстро и легко либо выполнять пакетный индекс и искать данные, хранящиеся в базе данных SQL, хранилище NoSQL, либо просто файлы.

Grep

Я удивлен, что grep так медленен, как вы описываете, можете ли вы уменьшить количество файлов, которые ищут? Например, когда мне нужно искать только в исходных файлах один исполняемый файл (из многих в проекте), я передаю имена grep из команды, в которой перечислены исходные файлы для этой программы:

grep expression `sources myprogram`

sources - это программа, специфичная для моей среды разработки, но вы можете иметь (или иметь возможность создать) что-то эквивалентное.

Я предполагаю, что вы пробовали очевидные методы, такие как

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

Я прочитал предположение, что опция -P текущего grep может значительно ускорить поиск.

4

а как насчет cscope, это соответствует вашей обуви?

Позволяет искать код для:

  • все ссылки на символ
  • глобальные определения
  • функции, вызываемые функцией
  • функции, вызывающие функцию
  • текстовая строка
  • шаблон регулярного выражения
  • файл
  • файлы, включая файл
3

grep, нет Но есть несколько программ, которые используют индексы и нацелены на кодовую базу. ctags (есть версия, предоставляемая с vim), etags (предназначенные для использования с emacs), global (более независимые от редактора) - это то, о чем я сейчас думаю, но, вероятно, есть и другие.

2

Вы можете скопировать свою кодовую базу на RAM-диск.

2

если вы хотите использовать полнотекстовый поисковик .. используйте один:

-1

Нет, я так не думаю. Но может быть простое решение: попробуйте ack. Я думаю, что если вы дадите ему шанс, вы обнаружите, что он значительно быстрее, чем grep, требует более коротких строк поиска, чтобы получить лучшие результаты поиска, и имеет много желаемых функций, в то же время используя почти те же переключатели команд. Одна вещь, которая делает его более быстрым (хотя и не индексируемым), это то, что он игнорирует гораздо больше вещей, которые вы не хотите искать. Он написан на Perl и использует регулярные выражения Perl (и, следовательно, также имеет порты Mac и Windows).

http://betterthangrep.com/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .