UniversalCodeGrep — утилита для быстрого поиска по исходникам

UniversalCodeGrep (ucg) создана, чтобы искать по коду быстрее, чем grep и так же удобно, как Ack. Исходный код доступен на GitHub, инструкции по установке и использованию есть далее в статье.

По замыслу создателей, ucg должна полностью удовлетворять нетерпеливых программистов, которым нужно быстро найти что-то в большом количестве файлов с исходниками. Утилита написана на С++11 и использует параллелизм (и другие фишки этого стандарта С++) для ускорения сканирования, одновременно улучшая за счёт этого возможности по портированию на различные системы. Регулярные выражения поддерживаются за счёт библиотеки PCRE с применением JIT компиляции, что также даёт неплохой буст скорости на большинстве платформ.

Для сравнения приводятся результаты сканирования исходников Boost 1.58.0 на Fedora 23, использовались ucg 0.2.0, ag 0.30.0, ack 2.14:

КомандаВремя
time ucg 'BOOST.*HPP' ~/src/boost_1_58_0~ 0.53 seconds
time ag 'BOOST.*HPP' ~/src/boost_1_58_0~ 11.1 seconds
time ack 'BOOST.*HPP' ~/src/boost_1_58_0~ 18.3 seconds

 

UniversalCodeGrep также быстрее самого grep на 25%.

Установка

На Ubuntu можно сделать так:

На Red Hat/Fedora/CentOS:

Бинарные RPM для OpenSUSE доступны здесь.

Или можно установить из исходников:

Зависимости

Для установки вам понадобятся gcc версии не ниже 4.8 (в более ранних нет достаточной поддержки С++11), а также pcre версии 8.2 или выше.

Поддерживаемые ОС и дистрибутивы

Проверка была проведена на следующем:

  • Linux
    • Ubuntu 15.04
    • CentOS 7
    • Fedora 22
    • Fedora 23
    • RHEL 7
    • SLE 12
    • openSUSE 13.2
    • openSUSE Leap 42.1
  • Windows 7 + Cygwin 64-bit (однако скорость на винде почти как в ag)

Использование

Вызовы ucg такие же, как и для ack или ag:

Здесь PATTERN — это PCRE-совместимое регулярное выражение.

Подробнее

Более детально с инструментом можно ознакомиться на странице проекта.