LINUX.ORG.RU

ripgrep 15.0.0

 ripgrep, , , ,


1

6

16 октября, после более года разработки, состоялся выпуск 15.0.0 быстрой кроссплатформенной консольной утилиты ripgrep, предназначенной для многопоточного рекурсивного поиска текста в файлах.

По умолчанию ripgrep использует поиск по регулярному выражению в файлах текущей директории, учитывает правила .gitignore и автоматически пропускает двоичные файлы и скрытые файлы и директории.

Утилита написана на языке программирования Rust и распространяется по лицензии MIT или Unlicense.

Основные изменения:

  • Исправлено несколько ошибок сопоставления правилам .gitignore. Среди них часто встречающаяся ошибка, связанная с применением правил .gitignore из родительских директорий.
  • Исправлена регрессия использования памяти при обработке очень больших файлов .gitignore.
  • rg -vf file теперь соответствует всему, если file пустой.
  • Опция -r/--replace теперь работает с опцией --json.
  • Подмножество репозиториев Jujutsu (jj) теперь обрабатывается так, как если бы они были репозиториями git. То есть ripgrep будет учитывать .gitignores jj.
  • Теперь в шаблонах глобов можно использовать вложенные фигурные скобки.
  • Улучшена производительность при использовании больших значений параметра опции -A/--after-context.
  • Множество улучшений в наборе типов файлов, доступных для фильтрации по умолчанию.
  • Автодополнения для fishshell учитывают конфигурационный файл ripgrep.
  • В список доступных атрибутов стиля опции --color добавлен курсив.
  • При использовании многопоточности поиск файлов производится в указанном пользователем порядке.
  • Добавлен тип цвета highlight для стилизации несовпадающего текста в совпадающей строке.
  • Улучшено автодополнение для --hyperlink-format в bash, fish и zsh.
  • Исправлено большое количество ошибок.

>>> Подробности на GitHub

★★★★★

Проверено: CrX ()
Последнее исправление: CrX (всего исправлений: 1)

Утилита написана на языке программирования Rust и распространяется по лицензии MIT или Unlicense.

Здорово, всё как я люблю.

yvv1
()

Ого! Вот она, мощь и необузданная сила rust! То, что может любой в меру вменяемый ФМ, теперь наконец-то написано на rust! Ура, срочно во все дистрибутивы! И версия – аж 15! Как же я жил без всех предыдущих…

rmammoth
()
Последнее исправление: rmammoth (всего исправлений: 1)
Ответ на: комментарий от rmammoth

В огороде бузина, в Киеве - дядька.

ФМ и grep - утилиты для совершенно разных задача, применяющиеся часто в различных контекстах.

Да и покажи мне ФМ с возможностями ripgrep, покажи.

Chiffchaff
()

Классный проект, сэкономивший мне несчетное количество времени и нервов. Понятно, что первопроходцем был ack-grep, и спасибо ему за идею, но ripgrep довёл идею до совершенства.

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

Утилиты типа ripgrep, fzf кажутся небольшими, не очень значимыми, но экономят сотни часов времени.

Chiffchaff
()
Ответ на: комментарий от dataman

Я не вижу пока для себя большой необходимости. Даже если я по всему своему домашнему каталогу буду искать (что мне нужно раз в полгода-год), то скорости ripgrep мне хватает.

Если же ищу по рабочим проектам, то результаты появляются настолько молниеносно, что не вижу смысла в дальнейшем ускорении.

То есть, я верю, что ugrep может быть быстрее, но на что уже повлияют эти проценты?

Chiffchaff
()
Ответ на: комментарий от Chiffchaff

А я ag пользуюсь по старинке, интересно в чем принциппиальное отличие от ripgrep, кроме языка

masa ★★
()
Ответ на: комментарий от Chiffchaff

То есть, я верю, что ugrep может быть быстрее

Там и TUI удобный, с интерактивным поиском! :)

dataman ★★★★★
() автор топика
Ответ на: комментарий от Chiffchaff

Ну спасибо товарищу, который создал топик «20 утилит на Rust», благодаря тому топику узнал про ripgrep, exa (ныне eza), dust, starship, alacritty, zellij.

Nurmukh ★★★
()
Ответ на: комментарий от bryak

На втором скриншоте забанили?

dataman ★★★★★
() автор топика

Уже даже ИИ пользуется ripgrep (codex) чтобы быстро шерстить проект, а лоровцы о ней даже не знают!

goingUp ★★★★★
()

Преимуществ перед старым традиционным grep для себя не нашёл.

kaldeon
()
Ответ на: комментарий от rmammoth

И версия – аж 15! Как же я жил без всех предыдущих

Да это вовсе и не жизнь была... ;P ;))

Но уж теперь-то — заживём!.. :)))

Somebody ★★★
()

Народ, у меня одного вот сейчас создалось впечатление, что я вместо ЛОРа попал на страничку какого-нибудь онлайн-магазина торгующего, прости, Господи, БАДами?

Ну типа

⠀⠀⠀⠀⠀⠀⠀⠀⣴⠟⠛⠛⠛⠛⠛⠛⠛⠛⢛⣛⣻⣦⠀⠀   В нашем магазине новое поступление!!
⠀⠀⠀⠀⠀⠀⠀⠀⣿⣶⣶⡶⠀⠀⠛⠛⠋⠉⠉⠉⠉⣿⠀⠀          "Мультикальций 15000"⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠘⠿⢿⡿⠿⠿⠿⠿⠿⠿⠿⠿⢿⡿⠿⠃⠀⠀⠀⠀   | Купить сейчас за 100500 |⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣠⣶⠿⠃⠀⠀⠀⠀⠀⠀⣶⡀⠘⠿⣶⣄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣼⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⢷⣄⠈⢻⣧⠀Намного эффективнее "Мульткальция 14000"
⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣿⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣿⠀   излечит паранойю, ОРЗ и простатит!
⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣿⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣿⠀     за счёт добавления мочегонных⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣿⠀       и усыпляющих наночастиц
⠀⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠀⢸⣿⠀  устранён небольшой побочный эффект
⠀⠀⠀⠀⠀⠀⢻⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⠀⣸⡟⠀      в виде неудержимой диареи.
⠀⠀⠀⠀⠀⠀⠀⠛⢷⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⡾⠛⠀⠀⠀⠀⠀⠀⠀

                 --Отзывы наших покупателей--
Елена:
Я всегда покупаю "Мультикальций"! Очень помогает от простатита!
Не знаю как бы жила без него.

Глафира:
Отличная новость! Я всегда покупала "Мультикальций 14000", 
а "Мультикальций 15000" ещё лучше! Прыщ на втором подбородке
почти рассосался, и теперь нет тяжести в желудке после пончиков!

Кристина;
Если бы не "Мультикальций 15000", я бы никогда не вышла замуж!
Очень помогает в семейной жизни, всем рекомендую, он лучше всяких
там витаминов и фруктов. Ещё обязательно приобретите в этом 
магазине "Дездрапермий 7456", "Жопозол 13" и "Лупоглазин П32", тогда
ваш хвост снова станет гладким и шелковистым, как в детстве!

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от dataman

Глаголы в названии ПО??? Слишком самонадеянно, думаю они не смогут «порвать» старичка семидесятых годов выпуска.

drfaust ★★★★★
()

Не понятно - это прямой аналог git grep? Если да, то какая киллер фича? Т.е. нафига её использовать в народном хозяйстве?

vtVitus ★★★★★
()
Ответ на: комментарий от Stanson

Когда упоминается Раст, это страничка Кунсткамеры. В которую экспонаты приходят сами и вываливают свой богатый внутренний мир.

dataman ★★★★★
() автор топика
Ответ на: комментарий от MoldAndLimeHoney

См. скриншоты в предыдущих новостях ugrep.
А, и в ugrep два RE-движка – PCRE2 и их собственная библиотека https://github.com/Genivia/RE-flex.

dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

https://ugrep.com/#TUI

The interactive TUI
-Q start TUI to specify search patterns and options interactively
-Q -e PATTERN start TUI and search for PATTERN
-Q -e PATTERN --view=nano start TUI to search for PATTERN, press CTRL-Y to edit a matching file at the first matching line with nano

Also...

* options, files and directories are taken from the command line to start the TUI search
* ALT-key toggles the option letter corresponding to the key press, for example ALT-L lists matching files (option -l) and SHIFT-ALT-C shows context (option -C3)
* ALT-key in MacOS terminal is OPTION-key when "Use Option as Meta key" is enabled in Terminal Preferences/Profiles/Keyboard
* ALT-key in xterm may not work unless xterm*metaSendsEscape: true is added to ~/.Xdefaults
* navigate to directories and files with Tab, then SHIFT-Tab to go back and restore previous options and patterns (if changed)
* use the cursor keys, PgUp, PgDn and the scroll wheel to scroll the search results
* ALT-G glob editor to match filenames and directories (globs ending in /) or exclude them with ! for example !tmp/
* CTRL-S jumps to the next context match, the next matching file or the next directory in the list, CTRL-W jumps back
* CTRL-T or F5 toggles the split screen file viewer; option --split starts the TUI with the split screen
* CTRL-X or F3 sets a bookmark and CTRL-R or F4 restores it
* CTRL-Y or F2 displays a file in a pager, a specific pager or editor is specified with option --view=PAGER
* CTRL-Z or F1 displays help and the active search options that can be toggled on/off with ALT-key or just key
* ENTER enters output selection mode to select lines to output when exiting the TUI (selections are kept until TUI * exits or until a new search is performed)
dataman ★★★★★
() автор топика

Очень хорошая утилита, одна из первых, которую я ставлю в систему. В интерактивном использовании для меня полностью заменила grep. И это не простое достижение, я весьма консервативен.

vbr ★★★★★
()

ripgrep 15.0.0

Уже 15-я, а я о ней первый раз слышу, похоже у ребят с самомнением всё в порядке. Но судя по описанию чуваки её пилят под свои хотелки которые могут совпадать с хотелками многих, только вот название как-то не очень, ладно бы было newgrep или nextgrep, а то прямо сразу на rip замахнулись.

anc ★★★★★
()
Ответ на: комментарий от goingUp

А ещё ripgrep используется для поиска в vscode, тоже интересный факт.

vbr ★★★★★
()
Ответ на: комментарий от vtVitus

Для меня три киллер фичи.

  1. Адекватный современный синтаксис регулярных выражений.

  2. Скорость. На огромных файлах он работает гораздо быстрей.

  3. Опция -r, позволяющая заменять найденные результаты, с использованием захваченных групп.

vbr ★★★★★
()
Ответ на: комментарий от Stanson

Просто шикарно! Сами выдумали или свиснули откуда-то?

anc ★★★★★
()
Ответ на: комментарий от drfaust

Слишком самонадеянно, думаю они не смогут «порвать» старичка семидесятых годов выпуска.

Золотые слова! Тогда люди действительно умели оптимизировать код, а не тяп-ляп и в продакшен.

anc ★★★★★
()
Ответ на: комментарий от dataman

А ей уже больше 9 лет…

А я посмотрел version history перед тем как написать. :)

anc ★★★★★
()

Годнота подъехала.

WatchCat ★★★★★
()

Добавил в игнор тег rust, по прежнему вижу эту новость. Господа ответственные лица, сделайте с этим что нибудь. Или фльтры такие, или я не понимаю, как тут фильтрация тегов работает.

gns ★★★★★
()
Ответ на: комментарий от dataman

Дядь, я не в курсе, никогда такой ерундой не занимался. Не думал что придется, но вот...

gns ★★★★★
()
Последнее исправление: gns (всего исправлений: 1)
Ответ на: комментарий от gns

Добавил в игнор тег rust

Тогда можно не узнать, что какая-то новомодная утилита написана на расте и значит наверняка притащит с собой тонны неведомых даже её авторам бинарных зондов.

bread
()
Ответ на: комментарий от MoldAndLimeHoney

Там должно быть 0.0.15. У них просто от жопы всё считается.

bread
()
Ответ на: комментарий от steemandlinux

Если ripgrep быстрый за счёт конечных автоматов в регулярных выражениях (а именно этот пункт стоит на первом месте), то эта техника была впервые открыта в восьмом издании юникса.

kaldeon
()
Ответ на: комментарий от vbr

Очень хорошая утилита, одна из первых, которую я ставлю в систему. В интерактивном использовании для меня полностью заменила grep. И это не простое достижение, я весьма консервативен.

если консервативен и пишешь скрипты, то нужно выбирать, думаю, просто grep, ибо есть из коробки и есть надежда что твои скрипты и через 20 лет будут работать верно, а что касается ripgrep - тут не уверен (собственно, я так понимаю, потому обычный grep и медленнее, что ему надо не поломать старые скрипты пользователей «новым» функционалом/возможностями)

Sm0ke85
()
Ответ на: комментарий от vbr

В интерактивном использовании для меня полностью заменила grep

Но это не замена grep. Рекурсивный обход дерева файловой системы не является задачей grep. Если же использовать сабж именно как grep, то это из пушки по воробьям. Чтобы грепнуть ввод тащить стремный комбайн на недоязычке, требующем гигабайты мусора для сборки. Нутакое!

bread
()
Ответ на: комментарий от goingUp

Уже даже ИИ пользуется ripgrep (codex) чтобы быстро шерстить проект, а лоровцы о ней даже не знают!

Хз, у меня и обычный grep в скорость SSD упирается:

$ time sgrep FIXME
<...>
real	0m14,271s
user	0m1,694s
sys	0m2,805s
$ du -hs .
2,0G	.
$ find . | wc -l
52940
$ time sgrep FIXME
<...>
real	0m1,729s
user	0m0,767s
sys	0m0,330s

Реально, как в другой теме написали: «Если к жопе присобачить сопроцессор фирмы Cray, можно гадить в три сортира в десять тысяч раз быстрей».

Польза всех этих оптимизированных утилит на Раст - весьма сомнительна.

Использую вот такой алиас в работе:

alias sgrep="grep \
  --color=auto \
  -r -n \
  --exclude-dir=.svn \
  --exclude-dir=.git \
  --exclude-dir=.deps \
  --exclude-dir=build-aux \
  --exclude-dir=m4 \
  --exclude-dir=*-obj \
  --exclude='*.[oa]' \
  --exclude='*.so' \
  --exclude='*.xz' \
  --exclude='*~' \
  --exclude-dir=autom4te.cache \
  --exclude=aclocal.m4 \
  --exclude=config.sub \
  --exclude=ltmain.sh \
  --exclude=.intltool-merge-cache"
wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от bread

Рекурсивный обход дерева файловой системы не является задачей grep.

$ man grep | grep -A2 -- --recur
       -r, --recursive
              Read  all  files under each directory, recursively, following symbolic links only if they are on the command line.  Note that if no file operand
              is given, grep searches the working directory.  This is equivalent to the -d recurse option.
wandrien ★★★
()
Ответ на: комментарий от steemandlinux

dust
В 20 раз быстрее.

Быстрее скорости света, ага.

Ничего, что даже обычный советский ncdu упирается в скорость чтения SSD? И если кэш инодов прогрет, то даже на моём древнем ноуте проходит по 1 миллиону файлов за время порядка 2-3 секунд?

$ find . | wc -l
1314610
$ time find . -fprint /dev/null

real	0m2,246s
user	0m0,736s
sys	0m1,499s
Status: 1
$ time du -hs .
49G	.

real	0m3,508s
user	0m0,710s
sys	0m2,784s
wandrien ★★★
()
Ответ на: комментарий от Sm0ke85

если консервативен и пишешь скрипты, то нужно выбирать, думаю, просто grep, ибо есть из коробки и есть надежда что твои скрипты и через 20 лет будут работать верно

Я не зря написал «в интерактивном использовании». В скриптах я тоже использую grep. И не просто grep, а подмножество grep, которое работает и на линуксе, и на макоси (ну по крайней мере стараюсь, проверять, честно говоря, обычно лень).

а что касается ripgrep - тут не уверен (собственно, я так понимаю, потому обычный grep и медленнее, что ему надо не поломать старые скрипты пользователей «новым» функционалом/возможностями)

Он медленнее, потому, что там другие алгоритмы. Другой движок регулярных выражений, по-другому с файлами работа идёт. Я даже не уверен, что там банальная многопоточность используется.

vbr ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.