Состоялся выпуск проекта ugrep 5.0, развивающего продвинутый вариант утилиты grep для поиска данных в файлах. Дополнительно поставляется интерактивная оболочка ug с интерфейсом пользователя, предоставляющим предпросмотр окружающих строк. По производительности ugrep в разы опережает grep. Код проекта написан на языке С++ и распространяется под лицензией BSD...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=60622
Серьёзный вопрос - оно лучше ripgrep? Просто как-то сомневаюсь.
ты нипанимаишь - ripgrep, пусть и лучше, но на расте. а это тупик для анонов. им надо с сишкой только.
А чем оно лучше? Синтаксис регулярок свой собственный, обглоданный и ни с чем не совместимый, постоянно падает, пытается читать сразу несколько файлов и тормозит.
> А чем оно лучше? Синтаксис регулярок свой собственный, обглоданный и ни с
> чем не совместимый, постоянно падает, пытается читать сразу несколько файлов и тормозит.Ну так они и назвали его rip намекая на перспективы проекта. Провиды бывают даже среди хрустиков :)
+ готов поспорить, что оно на 0.00000001% быстрее чем ripgrep
Если верить тестам, то ugrep быстрее:
search -n -no -wn -win -wino -c -wic -l -wil
ugrep 0.03 0.03 0.03 0.03 0.03 0.03 0.02 0.03 0.00 0.01
rg 0.03 0.04 0.03 0.05 0.05 0.06 0.03 0.05 0.00 0.02
ag 0.69 0.66 0.40 0.35 0.35 0.35 0.10 0.10 0.10 0.10
ggrep 0.11 0.13 0.15 0.15 0.53 0.53 0.11 0.51 0.00 0.08
По тестам и мюсли у авторов быстрее. Я проверял, на практике, рип не более чем на несколько процентов быстрее гну греп -- всё в пределах погрешности в итоге, но, при этом, это жалкий огрызок не являющийся заменой и сравнение даже не было равноценным. Ну и, всё же, чтобы засегфолтить гну греп придётся ещё попотеть.
> не более чем на несколько процентов```
% du -hs .
242M .
% time grep --color=auto -R test 2>&1 > /dev/null
0,11s user 0,51s system 97% cpu 0,630 total
% time rg -uuu test 2>&1 > /dev/null
0,17s user 0,64s system 718% cpu 0,113 total
```Да, всего-то на каких-то 500% быстрее. Спасибо многопоточности.
Это не равноценно. Если сравнивать в 1 поток (единственное практическое применение) и с регулярками, то всё не так замечательно.
И зачем нужно страдать, используя его в 1 поток?
А с какого рожна сравнение должно быть равноценным?! Типа сравнивая болид F1 с Москвичем у болида надо движок поменять и шины сдуть?
Тут скорее Ока сравнивается с Мерседесом. Конечно, глупо сравнивать 1 в 1, если возможности и применения разные, но хотелось бы видеть сравнения в том, в чём они выполняют одни и те же функции. И да, Ока ржавая.
Ржавая Ока и Мерседес с одинаковой скоростью стоят в пробке. Стоит ли переплачивать?
> Ржавая Ока и Мерседес с одинаковой скоростью стоят в пробке. Стоит ли
> переплачивать?Имхо, Ока ломается чаще и неожиданнее. Тут уже личный выбор, стоит ли переплачивать за комфорт и предсказуемость, или же для задач хватит собранной в гараже таратайки, которая будет сыпаться на ходу.
> Имхо, Ока ломается чащеРемонт Мерседеса - дороже.
Это уже 2-я переплата за него.
А с жизнью в Оке расстаться проще.
Это не только не равноценно, сравнивать прогретый кэш ФС с не прогретым, так ещё и считать не умеет: разница около 100мс , прибавка к производительности ~20% и при этом 8-ми кратное использование ЦПУ у рг. Ну г. как г. ...
>> 0,630 total
>> 0,113 total
> так ещё и считать не умеет: разница около 100мс , прибавка к производительности ~20% и
>> 97%
>> 718%
> при этом 8-ми кратное использование ЦПУ уСразу виден старый, заслуженный Ветеран-Воен Супротив Раста - забросил в свое время школу, дабы посвятить себя всего защите Земли (и Вселенной) от Ржавой Угрозы!
Правда, это постоянно аукается ...
Ага, эти подделают любые тесты лишь бы своего любимчика выгородить. Не раз уже пойманы за руку)
Ага, 3.14здеть, не мешки ворочать.Ответ был на вот этот коммент:
'''
% du -hs .
242M .
% time grep --color=auto -R test 2>&1 > /dev/null
0,11s user 0,51s system 97% cpu 0,630 total
% time rg -uuu test 2>&1 > /dev/null
0,17s user 0,64s system 718% cpu 0,113 total
'''гг: 0.11с юзер тайм + 0.51с систем тайм = 0.62с
рг: 0.17с юзер тайм + 0.64с систем тайм = 0.81срг на 23.45% медленнее. И жрёт 718% цпу, при этом тотал оказался 0.113 :):):):):) это каким идиотом нужно быть, чтоб подобние публиковать?
Герой, поиск по файловой системе замерил :) И рип запустил вторым на прогретом кэше.
Не знаю как ты тестил, у меня на стандартных задачах rg в 2-10 раз быстрее гнугрепа.
Полноценно тестил. Когда хотел ускорить поиск по дереву исходников. Быстрее он только когда есть быстрый случайный доступ. А это не то, что стоит замерять. Вообще, моя главная претензия это низкая надёжность и непредсказуемость.
Да уже поняли, что ты тестил rg в 1 поток. Хочешь реального прироста - юзай все возможности. Смысл rg в его фичах, а не в том, что там какая-то особая раст-магия, которая делает его быстрее.Что касается надёжности - хз, года 2 как перешёл с грепа (в том числе в скриптах), проблем не видел.
Когда я тестил не в 1 поток, гну греп ушёл вперёд с большим отрывом, а рип работал в разы дольше целиком забивая io.
А можно поподробней? На какой версии, с какими ключами, с какими регулярками и на каком наборе файлов проходило исследование? Может, всплыл какой-то специфический баг, который могли и починить уже.
Полагаю, дело было в iowait. А когда крашилось, это определённо баги, но мне не настолько интересно.
Года за 4 использования не сталкивался ни с крашами, ни с лагами, хотя и длинные сложные регулярки не писал.
Странно, я столкнулся в первую же неделю. Правда, и регулярки у меня специфические, а у раста свой наколенный диалект со своими глюками. Но там была зависимость от данных, не каждый файл триггерил, а это явно не дело. Миллионы раз за день вызывается же и нельзя работать только на идеальных, вручную подготовленных данных. В частности, там по-моему были приколы с символом возврата каретки. Как можно не заметить iowait, я не представляю.
Где тесты, мань? Где багрепорты? Может хватит врать?
Мне, в общем-то, всё равно что там фанатки ржавого думают, я уже несколько раз собирал эту дрянь и тратил время, больше не собираюсь. Это определённо самая паршивая программа на ржавчине из существующих.
> Это определённо самая паршивая программа на ржавчине из существующих.Остальные ещё не лучше.
Да очевидно чел просто врёт, потому что очень нравится греп)
Сам посравнивал, в некоторых условиях в пайпе rg получался до 20% медленнее гнугрепа, а сабж – до 50%.
Пруфы, конечно же, никто и не думал предоставлять (с) Каневский
А потом "Ваши пруфы - не пруфы"(c)
У тебя там одноядерный процессор и IDE-диск что ли? Рипгреп для солидных господ с многоядерными системами и NVME.
Ну это просто ложь. Даже в этом треде есть выхлопы. Зачем вводить в заблуждение? Каждый же легко может проверить
В том и пертрушка, что любой может убедиться в правдивости. А если не получилось, тут повод задуматься о смене профессии на более подходящую способностям.
Конечно задумайся. Без пруфов приходить к технарям врать - это достойно настоящего гуманитария. РГГУ, держись, идёт подмога.
> Конечно задумайся. Без пруфов приходить к технарям врать - это достойно настоящего
> гуманитария. РГГУ, держись, идёт подмога.Т.е. ты сейчас серьёзно заявляешь, что, по-твоему, многопоточное чтение со случайным доступом будет не хуже последовательного однопоточного, и тебе надо предоставить доказательства обратного? Что у тебя в голове вообще?
Тебе уже попытались намекнуть, что всё зависит от условий:
1. Типа носителя. Для SSD в общем случае фрагментированность не играет никакой роли.
2. Наличие файла в кеше.
С какой целью кто-то будет намекать очевидное? Вообще, ты ошибаешься, фрагментированность тут не при чём (попробуй найди ещё такой фрагментированный файл), однако, она значительно просаживает производительность чтения, в том числе на ссд (при чём тут вообще ссд, кстати?), поскольку случайное чтение и так очень неэффективное (а данные размазаны по носителю), и уж когда оно параллельное тут прелести во всей красе вылезают. Про кэши глупость какая-то, пожалуй, оставлю без комментариев.
А "стандартные задачи" это что?
У меня - ну вот выхлоп stdout отфильтровать - уже даже в логи заглянуть задача все более "не стандартная" да и... и примерно все, наверное.
я так понимаю для "правильных" тестов нужно знать правильный набор флагов ?
для себя провёл простой тест "без всяких", просто найти слово rust
для более релевантного ответа трижды прогрел(запустил) тест и вывел самый последний.
релевантного потому что при первом тесте ugrep сильно задумался на десяток секунд в то время как ripgrep был быстр с первого же теста.$ time ug rust
...
________________________________________________________
Executed in 3.12 secs fish external
usr time 8.72 secs 297.00 micros 8.72 secs
sys time 2.04 secs 0.00 micros 2.04 secs
$ time rg rust
...
________________________________________________________
Executed in 23.43 millis fish external
usr time 36.95 millis 261.00 micros 36.69 millis
sys time 40.13 millis 77.00 micros 40.05 millis
"Какие-то неправильные у вас гуси":$ time grep -R xml ./kitchen 1>/dev/null 2>/dev/null
cpu=99% user=0.053 system=0.495 total=0.550$ time ug -R xml ./kitchen 1>/dev/null 2>/dev/null
cpu=92% user=0.001 system=0.002 total=0.003$ time rg xml ./kitchen 1>/dev/null 2>/dev/null
cpu=1142% user=0.238 system=1.508 total=0.153
Но ugrep из блэкджеком:
$ grep -R xml ./kitchen 2>/dev/null | wc -l
63474$ ugrep -R xml ./kitchen 2>/dev/null | wc -l
63468$ rg xml ./kitchen 2>/dev/null | wc -l
63474
А вообще, какая-то дичь в ugrep:$ time ug -R xml ./kitchen 2>/dev/null | wc -l
63468
cpu=475% user=0.605 system=2.352 total=0.621
cpu=27% user=0.023 system=0.147 total=0.621$ time ugrep -R xml ./kitchen 2>/dev/null | wc -l
63468
cpu=968% user=0.331 system=1.196 total=0.158
cpu=48% user=0.010 system=0.066 total=0.157
$ pacman -Qo $(which ugrep)
/usr/bin/ugrep is owned by ugrep 5.0.0-1$ pacman -Qo $(which ug)
/usr/bin/ug is owned by ugrep 5.0.0-1$ sha256sum $(which ug)
84ba767400753ac772df0d87c08f9f5e8e127ec3df1ab3f9367662e1e23a10da /usr/bin/ug$ sha256sum $(which ugrep)
f99d9cca69c3846141dad581baf2bad240614490834471b556cffa6e976e929a /usr/bin/ugrep
там вообще 4 утилиты, наверное для разных задач
$ pacman -Ql ugrep
...
ugrep /usr/bin/ug
ugrep /usr/bin/ug+
ugrep /usr/bin/ugrep
ugrep /usr/bin/ugrep+по поводу "неправильных гусей", даже если искать в одном файле у меня всё равно rg быстрее
$ time rg json .bash_history 1>/dev/null 2>/dev/null________________________________________________________
Executed in 2.18 millis fish external
usr time 0.38 millis 384.00 micros 0.00 millis
sys time 1.84 millis 0.00 micros 1.84 millis$ time ug -R json .bash_history 1>/dev/null 2>/dev/null
________________________________________________________
Executed in 3.01 millis fish external
usr time 2.73 millis 0.00 micros 2.73 millis
sys time 0.32 millis 324.00 micros 0.00 millis
Вот как тестировать нужно. рг самый быстрый, т.к. его просто нет! Неуловимый Джо!
[~/test]
> time egrep -R "^test" . >/dev/null 2>&1real 0m6.464s
user 0m3.913s
sys 0m2.308s[~/test]
> time egrep -R "^test" . >/dev/null 2>&1real 0m5.858s
user 0m3.870s
sys 0m1.935s[~/test]
> time egrep -R "^test" . >/dev/null 2>&1real 0m5.835s
user 0m3.875s
sys 0m1.907s[~/test]
> time ug -R "^test" . >/dev/null 2>&1real 0m1.891s
user 0m0.641s
sys 0m1.228s[~/test]
> time rg -R "^test" . >/dev/null 2>&1real 0m0.001s
user 0m0.001s
sys 0m0.000s[~/test]
> which rgwhich: no rg in (...)
[~/test]
> which ug/usr/bin/ug
> для себя провёл простой тест "без всяких", просто найти слово rustСоревнование по дефолтной агрессивности флагов?
Пришлите мне тестовую директорию, соберу утилитку которая обгонит любого конкурента, тестовую директорию и запрос не менять ;)
> Соревнование по дефолтной агрессивности флагов?нет, просто эмуляция того что например через пару недель мне вдруг нужно будет найти файл где упоминается определённое слово или словосочетание, а это сценарий в 98% случаев, так вот то что вы называете "дефолтная агрессивность флагов" я, да и большинство думаю согласятся, в данном случае, можно назвать разумным выбором дефолтных флагов автором программы. Как по мне, в таких случаях, проще добавить недостающие флаги чем убавить лишние.
> Серьёзный вопрос - оно лучше ripgrep?В работе с кодировками - лучше.
ripgrep не обрабатывает шаблоны, содержащие русские буковки:
% rg -i эмулятор *У меня терминал не utfный, а koi8й.
found invalid UTF-8 in pattern at byte offset 0: \xDC\xCD\xD5\xCC\xD1\xD4\xCF\xD2 (disable Unicode mode and use hex escape sequences to match arbitrary bytes in a pattern, e.g., '(?-u)\xFF')
> У меня терминал не utfный, а koi8й.Серьезно?
Я думал такие индивидуумы вымерли еще лет 10 назад.
Ну уж простите что современный софт не пишется с поддержкой старого хлама.
> Ну уж простите что современный софт не пишется с поддержкой старого хлама.Современный софт пишет вот такая же школота как ты. Между KOI8 (любой) и UTF8/16/32/LE/BE
есть таблицы сопоставления, но такие говнокодеры из тиктока не вдупляют про библиотеку icov
> ripgrep не обрабатывает шаблоны, содержащие русские буковки:Да при чём тут "русские буковки", когда у тебя:
> терминал не utfный, а koi8й.
Год сейчас уже 2024-й.
> У меня терминал не utfный, а koi8й.Вот он и сказал что ты дал ему на вход не utf-8, а набор байт (у ripgrep 2 режима - unicode и bytes, у других грепов обычно только bytes), и предложил как можно выключить utf-8 mode (= перейти в режим bytes) для работы с этим
Ripgrep круче и удобней, а это просто тот же grep, но быстрый и на крестах. Не понял зачем оно нужно для моих задач.
Не пользуйся
Не знаю как с ugrep, но вот чем rg не удобный:
1) Многие символы в начале шаблона поиска надо экранировать '\{' '\-'
2) Сильно урезанные регулярки без lookahead/lookbehind (имхо, одна из главных фич регуярок)
3) Не то чтобы стабильный, в некоторых версиях например не работал поиск по glob'ам, а для rg это ключевая фича для поиска по файлам с определенным именемНе стал записывать в минусы, но скорость rg достигается в основном агрессивными флагами, с -uuu он уже поскромнее. А без -uuu не ищет в .gitignore (ок, не всегда нужно), дотфайлах (это уже критично и про это надо вспомнить), бинарных файлах (мне некритично)
Всё так. Rg при _вдумчивом_ применении рвёт аналоги просто на порядки. Ugrep такой же как grep, но прост побыстрей. Для себя пробовал юзать grep, ugrep, rg в параллели - понял что в целом rg удобней.
Он даже запускается дольше.
Кто?
>Сильно урезанные регуляркиУже одного этого достаточно чтобы всерьез не рассматривать ripgrep в принципе.
> Ripgrep круче и удобней, а это просто тот же grep, но быстрый и на крестах. Не понял зачем оно нужно для моих задач.Лично у меня не получилось искать в *.docx с помощью ripgrep, но получилось с ugrep. Допускаю, что дело во мне, потому готов посмотреть на набор ключей от аксакалов рипгрепа, которые покажут как надо.
я так понимаю это что-то типа [ ripgrep-all + fzf ] в одном флаконе, но по фичам всё же до них не дотягивает ибо ripgrep-all поддерживает больше форматов а fzf имеет больше возможностей. В общем очередной комбайн.
Работать с такой утилитой учиться надо. Однострочник на перле будет короче и примерно в сто раз понятнее, чем мантры нестандартных флажков. Для большинства ситуаций можно обойтись rgrep | xargs sed. Люди не учат базовые юниксовые вещи, не понимают, что так можно.>написан на языке С++
>распространяется под лицензией BSDШаблон порвал automake в качестве сборочной системы. Ожидал cmake или meson.
>ugС названием утилиты зато все хорошо.
О, а вы, я погляжу, юникс ветеран? Ну давайте сравним юниксовый grep/sed с гнутым. Какой из юниксов возьмём?) Я бы предложил digital unix, да помер он 15 лет назад.
Совершенно не обязательно быть ветераном и с 80х годов пользоваться юниксами, чтобы использовать мощь юниксового подхода. Я очень редко админил фряху, но жил всегда на линуксе, так что никаким ветераном юникса не являюсь.
Юникс - это прежде всего мышление и подходы.
Как большинство пользует стандартные утилитки? В основном, копируя готовые "команды". Тогда как настоящая мощь в том, чтобы писать программу под каждую идею. Шелл, сед, авк, перл - куча вариантов. 95% сисадминов на это не способны, потому что предпочитают не вылезать из окошек, не хотят мыслить потоками данных, их фильтрами, трансформациями, перенаправлениями. Хотят императивно перебирать "сущности", писать условия (расставлять флажки). Инстинктивно понятная любой обезьяне деятельность.
Вот-вот. У нас один сотрутник таскает awk в windows
> неточный поиск (fuzzy)Это как? 🤔
Когда ты ищешь, к примеру, "каледор", но поиск выдаёт так же и правильное "коридор". Т.е. выдаёт слова, ПОХОЖИЕ на искомое.
Княжество Каледор − место, где находится Кузница Ваула, самый яростный из всех вулканов Ултуана.
Наверное, выдать результаты отличающиеся на несколько символов от заданной маски и/или образца.
Документацию не читал, сразу честно признаюсь.
Позволяет находить результаты, отличающиеся от заданного образца на заданное число символов (по умолчанию на 1):
то есть найдет как заданный образец, так и варианты, где на 1 символ больше, на один символ меньше или один из символов отличается. Количестве символов различия можно задать (а заодно и варианты какие именно отличия нужны - например только если символ лишний или только если n символов отличается).с этм ключем в его виде по-умолчанию (различие в 1 символ):
при поиске "test" найдет и, собственно, "test" и "test1", "te2st", "2test", "tst", "est", "tes", "t3st", "nest".Удобно, например, если ожидаете, что слово может оказаться написанным с ошибкой или опечаткой и в некоторых других сценариях.
> вложенный поиск,И это как? 🤔
> перекодирование текстовых кодировок
Кодировки из какого набора?
Из iconv --list?
Вложенный - видимо, поиск в результатах. Скажем, ищешь строку, где есть коммент "//TODO", а потом среди тудушек ищешь задачу со словом update. Это ЕСЛИ вложенный поиск идёт в найденой строке. А учитывая туnую логику автора, он может искать и чисто в файле!
Сразу видно, утилиту писал линynсоидный "юзабилист" (в кавычках, потому что самый отстойный юзабилист на планете).Это утилита ПОИСКА. А значит должна работать по-умолчанию с максимально юзабельными флагами. Что это такое - автору ugrep неизвестно, поэтому сразу же наляпал дерьма в дефолтовых значениях:
1. РегистроЗАВИСИМЫЙ поиск. Чегобл?!?! Вы серьёзно предлагаете мне учить и вытаптывать на клаве все регистры (будто я их помню) ?! Я только помню openfile, я почём знаю, какие там буквы верхние? Факап.
2. По какой-то туnой логике автор думает, что у всех один каталог со всеми сорсами и он там ищет. А ничего, что есть ВЛОЖЕННЫЕ каталоги, в которых утилита НЕ ищет?! Де6илизм...
3. Нет вывода номера строки. Этот клоун что думает, я нашёл файл чисто "поглазеть на имя"? Мне и строка нужна! Мне некогда шароёпиться по файлу и искать, где он там нашёл совпадение.
Понимаю, клаводр0черы сразу же предложат "создать батник", но... зачем создавать батник, если можно сразу сделать по-человечески?! Что за наплевательское отношение к людям? Или он думает, что скопировал г:::но 40-летней давности (grep), значит и все порочные практики надо тоже сюда тащить?! Нет уж, жрите сами.
Ну и ещё по этому юзабиласту: запуск в венде с -Q выдал:[mugrep: [1;31mno ANSI terminal keyboard detected [m
Ну да, ну да, пошли мы нафиг, юзеры оффтопика :)
> Ну да, ну да, пошли мы нафиг, юзеры оффтопикаВсё правильно.
По-поводу 1 2 3 - это дефолты в grep.
Думаешь, ему есть какое-то дело до вопросов совместимости, и чтобы скрипты не ломались?
> Думаешь, ему есть какое-то дело до вопросов совместимости, и чтобы скрипты не
> ломались?Очевидно, да.
Причём тут вообще совместимость?! ugrep - это НОВАЯ утилита. Да, "по мотивам" старого grep, но написана-то она в 21 веке! Уж наверное если кто-то заморочился написать ЕЩЁ ОДНУ искалку, то она совсем не обязательно должна быть совместимая. Желательно, но не обязательно. ТЕМ БОЛЕЕ, что если у тебя тыщща "скриптов", нафига тебе ugrep?! Юзай старую, СОВМЕСТИМУЮ grep, делов-то! А вот для новых практик "пальцетыканья в консоли" утилита должна предоставлять максимально краткий синтаксис и максимально удобные дефолты.
> По-поводу 1 2 3 - это дефолты в grep.Т.е. если какие-то долбояшщеры 100500 лет назад приняли тупейшее решение...
то мы должны тянуть это годами "патамушта диды завещали не ломать обратную совместимость"???
И в этом весь линукс... Не дай бог сломать скриптик какого-то неосилятора исправить!
Ну, вы ж дохреналлион баш-портянок за нас всех переписывать не пойдете? С появлением systemd их количество несколько снизилось с а(х)фиглиарда до всего лишь дохреналлиона - но наткнуться мизинцем-об-табуретку когда какой-то пионЭр в centos'е 8 "поменял" родной-немодный grep на вот новый ripgrep - было нифига не прикольно.
А кто вообще вас заставляет менять grep на ugrep!??!?! Нужны скрипты - сидите на протухшем grep, он всё равно всегда есть в системе. Но для работы, для БЫСТРОГО поиска файлов, сделали ugrep, которой вообще не обязательно быть совместимой с grep. Не настолько "диды" были умные, делая умолчания для grep. И ugrep может (и должен) исправить эту порочную практику. Пункты я указал, АРГУМЕНТЫ против имеются? (кроме остоnи3девшей мантры "совместимость с тухлым прошлым")
> А кто вообще вас заставляет менять grep на ugrep!??!?! Нужны скрипты -
> сидите на протухшем grep, он всё равно всегда есть в системе.
> Но для работы, для БЫСТРОГО поиска файлов, сделали ugrep, которой вообще
> не обязательно быть совместимой с grep. Не настолько "диды" были умные,
> делая умолчания для grep. И ugrep может (и должен) исправить эту
> порочную практику. Пункты я указал, АРГУМЕНТЫ против имеются? (кроме остоnи3девшей мантры
> "совместимость с тухлым прошлым")1. Меня - никто не заставляет, но у пионЭров периодически че-шет-ся.
2. Собственно, называйся оно какой-нибудь bystroye_iskalko - ваще без вопросов. Но ассоциировать себя с grep'ом будучи при этом чуть-чуть, самую капельку, малость - "не таким"... осуждаем, решительно осуждаем. Фу таким быть!
3. As for me - интерактивное грепование по кучам мусора на боевых серверах все больше-и-дальше уходит в область "славного прошлого"-туды-ему-и-дорога, а вот кривая-косая-горбатая скриптота с нами, увы, примерно "навсегда". Поиск по электронной почте? По адресной книге\контактам? По пачке docx\pdf? По имени файла, раз уж "по содержимому" мы ниалё? Неее, ребят - со всем этим вам не сюда. Сколько-нибудь осмысленный (Не "переменная Х_Е_Р", а find usages\goto definition хотя бы) поиск по проекту? Опять мимо. Логи греповать? Так эластик или там какой loki тупо удобней в современных окружениях. Локально на сервере? Ну, там где это осмысленно - journalctl тупо быстрее, да еще и позволяет серверу в этот момент делать что-нибудь полезное, а не только "греповать-в-цать-потоков". Есть задачи, где\когда grep все еще нужен\удобен - но для меня они настолько "разовые", что на скорость\"удобство" примерно покласть - не стоит того, чтобы переучиваться.
>> По-поводу 1 2 3 - это дефолты в grep.
> Т.е. если какие-то долбояшщеры 100500 лет назад приняли тупейшее решение...С чего вдруг?
1. По умолчанию поиск ищет соответствие шаблону. Я бы ожидал регистрозависимого поиска.
2. Рекурсивный поиск - более трудоемкая задача. Проведи аналогии с яп, где deepcopy никогда не применяется по умолчанию.
3. Чаще всего нужен результат, чтобы его передать на вход другой команде.
1. Объясни, ЗАЧЕМ тебе "регистрозависимый поиск". Ты что, боишься найти "машу" вместо "Маши"?? Это не праздный вопрос, просто хочу поглядеть, ты просто усираешься над защитой "дидов" или у тебя есть реальные причины.2. На компьютере вообще ВСЁ трудоёмкое! От декодирования JPEG до записи файла в служебные таблицы ФС. И что теперь - работать на "отъявись"? Если я докатился до ПОИСКА, значит очевидно, что я НЕ ЗНАЮ, где мой файл! А учитывая иерархии, даже как-то глупо объяснять школотронам, что поиск ВГЛУБЬ нужен как воздух. ОСОБЕННО если это сорсы.
3. Не натягивай личные практики на общие утилиты. Grep - это grep, это ПОИСК. Забыл где конфиг - грепанул и нашёл, причём тут "вход другой команды"? _Я_, человек, занимаюсь поиском, потому что мне нужно найти файл.
Итого, вижу полный и глупый антагонизм моим замечаниям "лишь бы по_с_раться". Логику ЧЕЛОВЕЧЕСКУЮ примени и сразу удивишься, насколько чужероден мир линукса внешнему обывателю.
1. Очевидно, что практика программирования и конфигурирования показывает сильную разницу между поиском, например host и Host. Насколько я могу судить в винде не так. Но кого это волнует.
2. Для поиска вглубь есть find который ищет файлы по куче условий. А вот уже список файлов можно использовать для grep.
3. При том, что для быстрого поиска по файлам используются специальные сервисы, которые хранят индексы для файлов для быстрого поиска.
Добавлю простенький пример:find ./ \( -name "*.cpp" -or -name "*.hpp" \) ! -name moc_* -exec grep -H File {} \;
Ну ты мне прямо глаза открыл! :)) А ничего, что эти "дефолты" придумывали люди с ограниченным умишком и 40 лет назад?! Время идёт, практики меняются, совершенствуются. То, что в 197* казалось очевидным, в 202* уже кажется смешным. Если уж вы делаете утилиту для НАБОРА ПАЛЬЦАМИ В КОНСОЛИ, неужели нельзя сделать дефолты максимально юзабельными?! Чтобы мне требовалось набрать ТОЛЬКО "ug подстрока" и ВСЁ!
Очевидно же, что чем меньше надо указывать флагов, тем быстрее работа.
Ну, персонально _я_ предполагаю, что по исходникам имеет смысл искать с помощью _ide_, а не прикручивать к чему-то-там "фигню сорокалетней давности" в попытках эту самую IDE получить.
А вот для работы уже готовых скрЫптов Эн-летней давности стабильность "воооон тооой фигни" важна-и-нужна.
Бывает, задача не только в сорсах! Например, ты забыл, какой вебсайт у тебя на порту 8080. Грепанул - вот тебе конфиг! И чем меньше надо указывать флагов в консоли, тем лучше - вот моя претензия.
> Бывает, задача не только в сорсах! Например, ты забыл, какой вебсайт у
> тебя на порту 8080. Грепанул - вот тебе конфиг! И чем
> меньше надо указывать флагов в консоли, тем лучше - вот моя
> претензия.Эм. Ну... "А НАХРЕНА?"
Вот чот даже как-то и сообразить не могу, в каком случае у меня на одном сервере может завестись пачка сайтов на разных портах и нахрена мне при этом выяснять их принадлежность именно "от порта", причем делать это достаточно часто, чтобы имело смысл букАвы экономить?
Ещё один косяк:
По старой юниксоидной привычке автор режет файл по '\n'. В венде же (для которой ugrep тоже скомпилен) принято окончание '\r\n'. Соотв. когда утилита выдаёт JSON-вывод, ВСЕ файлы имеют на конце мусорный '\r' - спасибо, рук0*опы, что кладёте болт на стандарты в ОС!
Нашли с чем сравнить по скорости - с grep. Академический пример из всех книг по Perl - однострочный скрипт работает быстрее, чем компилированный grep.
а смысл сравнивать, если все упирается в IO, ищем ведь один раз, и этот раз - всегда будет медленным внезависимости как назвать Г или УГ или РГ :)
Нихрена оно по .docx не ищет.Не нужно.
По docx искать нужно сервер поиска ставить под венду.
С какого перепугу? *.Docx - это всего лишь зипованный XML. Его можно обрабатывать и на Linux и на Windows. Не путать с бинарным форматом *.Doc.
К слову, ugrep УЖЕ УМЕЕТ искать в архивах, так что всё, что ему нужно - как-то "просеивать" теги ворда и выводить текст.
Нужно флаг работы с сжатыми файлами добавить - тогда впринципе ищет (напоминаю, что docx - это куча запакованных в основном xml'ек).
Как поставить одной командой?
ag уже не моден как погляжу? стОит с него переползать на сабж?
Если ты при выборе рабочих инструментов руководствуешься "модой" у меня для тебя плохие новости.
Если кому интересно, слепил WPF-прогу - враппер для ugrep:https://ic.pics.livejournal.com/thornik/956427/117679/117679...
> WPFЗaкoпaй это обратно, где взял.