The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В рамках проекта Glark развивается альтернатива Grep

10.08.2011 13:30

Представлен проект Glark, в рамках которого создана утилита, претендующая на роль улучшенной альтернативы grep. Код Glark написан на языке Ruby.

Отличительные черты Glark:

  • Подсветка масок и имен файлов в выводе;
  • Использование perl-совместимых регулярных выражений (PCRE), привычных для разработчиков на языках Perl, PHP, Python и Ruby;
  • Возможность использования составных выражений, работающих с учетом содержимого нескольких строк. Например: "glark --and=5 --or cout print --or double float *.c" выполнит поиск ключей "cout" или "printf" в ближайших 5 строках от строк с ключами "double" или "float";
  • Автоматическое определение текстовых файлов (поиск в бинарных файлах не производится);
  • Режим совместимости с GNU grep;
  • Поддержка указания диапазонов. Указание опций "--before" и "--after" позволяет ограничить область поиска, отсеяв определенную часть файла (например, для игнорирования первых 20 строк с заголовком "glark --after 20 маска файл").


  1. Главная ссылка к новости (http://www.linux.com/learn/tut...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/31446-grep
Ключевые слова: grep, search, Glark, ruby
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (46) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, рш (?), 13:40, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    +6 к фичам, -10 к скорости, -100 к размеру (руби же в зависимостях)
     
     
  • 2.5, Аноним (-), 13:55, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +7 +/
    + 100 к размеру, вы хотели сказать?
     
     
  • 3.19, рш (?), 14:44, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    да
     
  • 2.30, Аноним (-), 15:58, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Алсо:
    +1 к скиллу кодинга в руби
    -10 к скиллу разумного решения инжеерных задач.
     

  • 1.2, Аноним (2), 13:50, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    а я почему-то думал, что главное в этой утилите - скорость...
     
     
  • 2.7, Аноним (-), 13:58, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а я почему-то думал, что главное в этой утилите - скорость...

    поддерживаю

     
  • 2.33, Аноним (-), 16:04, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > а я почему-то думал, что главное в этой утилите - скорость...

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

     
     
  • 3.53, Аноним (-), 20:36, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > руби качать для работы с оным

    Ruby — зависимость texlive, его не надо качать.

     
     
  • 4.54, Аноним (-), 21:04, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ruby — зависимость texlive, его не надо качать.

    У меня почему-то нет никакого texlive и руби, но греп есть.

     
  • 2.41, Andrew Kolchoogin (?), 16:30, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Нет. (C)

    grep(1) никогда за скорость не боролась. Хотите быстро искать подстроку -- используйте fgrep(1).

    +скорость
    -regexp

    Быстро, дёшево, качественно -- любые два на выбор.

     
     
  • 3.44, Anonymouse (?), 17:43, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Так то оно так ... Но вот даже не запуская этот тулз готов на деньги поспорить что "медленному" grep'у он сольёт :) Напрочь!(С)Анек
     

  • 1.4, Аноним (-), 13:53, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Уберите из особенностей то, что есть в GNU grep или отделите их как-то
     
     
  • 2.6, Аноним (-), 13:58, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Подсветка есть (--color для цвета, -H для отоборажения имени файла, -n номера строк)
    Диапозоны есть (-A -B -C)
    и вообще man grep сначала
     

  • 1.8, Аноним (-), 13:59, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Мне эта какашка на руби не нужна. Пусть на си перепишут. :)

     
  • 1.9, oops (ok), 14:00, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    > улучшенной альтернативы grep.
    > Код Glark написан на языке Ruby.

    не клеится как-то

     
  • 1.10, Аноним (-), 14:08, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    чем оно лучше ack? (http://betterthangrep.com/)
     
     
  • 2.69, Одмин (?), 18:04, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Не знаю как щас а ack пару лет назад был глюкодромом: он выводил не всё. Не знаю как авторы добились. Плюс утилита стрёмная - её код автосгенерирован.
     

  • 1.16, inv (ok), 14:32, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Кому это надо? Мало того что PRCE сами по себе медленные из-за того что разработчики разменяли фичи на скорость. (Самая быстрая реализация регэкспов основана на теории конечных автоматов и конструкции Томсона.)
    Так эти велосипедисты решили ещё замедлить всё это дело, переписав греп на руби... сразу закопать!

    ps
    http://swtch.com/~rsc/regexp/regexp1.html

     
     
  • 2.58, Аноним (-), 02:24, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Так эти велосипедисты решили ещё замедлить всё это дело, переписав греп на
    > руби... сразу закoпать!

    Ну это вы понимаете, а рубисты понимают что "если на руби - значит улучшенная альтернатива". Логика забавная, но почему-то у питонистов, рубистов и жабистов это такой вот синдром.

     

  • 1.20, Аноним (-), 14:48, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    Ребята, куда вам эта скорость? Да, иногда она необходима. Терабайты логов, бла-бла-бла. Да и то, узкое место в этом случае - ввод/вывод, на чем написана утилита - какбы не самое важное.
    В большинстве же случаев удобство пользования куда приятнее. И тут свистелки вроде раскраски и PCRE как раз кстати.

    Хотя, по-моему тоже неочень получилось. Диапазоны бесполезны из-за head/tail, фич маловато, да и grep сам по себе неплох. Лучше бы find с человеческим лицом сделали.

     
     
  • 2.25, inv (ok), 15:17, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    grep быстр. Реализации регэкспов основанные на backtracking'е дохнут далеко не от гигабайтов логов, а от некоторых вариватов выражений, при том не очень длинных. (в статейке, что я привёл пример)
    Если нужны фичи, то опять таки, всё за исключением 'backreferences' есть к примеру тут:
    http://code.google.com/p/re2/

    "Unlike most automata-based engines, RE2 implements almost all the common Perl and PCRE features and syntactic sugars. It also finds the leftmost-first match, the same match that Perl would, and can return submatch information. The one significant exception is that RE2 drops support for backreferences¹ and generalized zero-width assertions, because they cannot be implemented efficiently. The syntax page gives full details."

     
  • 2.38, Аноним (-), 16:13, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ржевский, молчать Вот когда сам грепнешь пару гигов логов сервака - тогда и пой... большой текст свёрнут, показать
     
  • 2.49, Аноним (-), 18:52, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Ребята, куда вам эта скорость? Да, иногда она необходима. Терабайты логов, бла-бла-бла. Да и то, узкое место в этом случае - ввод/вывод, на чем написана утилита - какбы не самое важное.

    Наглая, тупая ложь. Скорость необходима всегда, а это угрёбище на ruby неспособно обрабатывать поток со скоростью диска, не говоря уже о ssd, рейдах, потоке из 10Gb сети, огромном выводе программы или банальном gunzip < log.gz | grep

    Кроме того, иногда необходимо запустить grep много раз, а тут важна скорость запуска, которая у этого угрёбища тоже кошмарная.

     

  • 1.23, segoon (ok), 14:58, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Как-то не впечатляет :(

    > Подсветка масок и имен файлов в выводе;

    grep --color

    > Использование perl-совместимых регулярных выражений (PCRE), привычных для разработчиков на языках Perl, PHP, Python и Ruby;

    grep -P ?  Хотя experimental.

    > Возможность использования составных выражений, работающих с учетом содержимого нескольких строк. Например: "glark --and=5 --or cout print --or double float *.c" выполнит поиск ключей "cout" или "printf" в ближайших 5 строках от строк с ключами "double" или "float";

    Вот тут наверное всё же лучше юзать awk - язык по-богаче будет для подобных выкрутасов.

    > Автоматическое определение тестовых файлов (поиск в бинарных файлах не производится;

    Софт не должен об этом думать.  Если не нужны бинарные файлы - не грепайте.  Если не хочется долго ждать завершения поиска в длинных строках по хитрым регекспам - юзать rlimit.

    > Поддержка указания диапазонов. Указание опций "--before" и "--after" позволяет ограничить область поиска, отсеяв определенную часть файла (например, для игнорирования первых 20 строк с заголовком "glark --after 20 маска файл").

    Чем head/tail не угодил?

    ИМХО конечно, но утилиты уровня grep должны быть быстрые и максимально простые.  Руби существует не для таких вещей.

     
     
  • 2.42, Аноним (-), 16:44, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Вот тут наверное всё же лучше юзать awk - язык по-богаче будет для подобных выкрутасов.

    Самое интересное, что это и побыстрее будет, а не только побогаче =)

     

  • 1.27, Аноним (-), 15:30, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    А в чем, собственно, проблем с грепом?
     
     
  • 2.39, Аноним (-), 16:17, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А в чем, собственно, проблем с грепом?

    Он написан не на руби. Поэтому у некоторых на заднице вылез красный прыщ - у них зуд, заставляющий заниматься велосипедостроением. Вообще, не жирно ли о каждом скриптике по новости зафигачивать? А если я шелскрипт на 5 строк рожу - это будет темой для новости? Может я даже какую системную утиль заменю. Ну вот например я могу на раз заменить /bin/false на версию написанную на баш (питоне, руби, перле, похапэ, яваскрипте или чем там еще). Давайте по этому поводу новость напишем? А лучше по новости на каждый язык, чтобы уж совсем хорошо :)

     
     
  • 3.43, Аноним (-), 16:46, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Подозреваю, что парни кодили исключительно ради удовольствия (как и многие другие), и от них глупо ждать чего-то полезного, они не ради этого стараются. А вот насчет того, зачем такие новости постить - тут я согласен
     

  • 1.40, Аноним (-), 16:23, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ужасно. Если тут и есть здравые идеи, то это только использование pcre вместо убогих posix'овых регулярок, хотя ещё лучше было бы заюзать Яндексовские pire, бо они в разы быстрее, а все фичи pcre почти никогда не нужны.

     
  • 1.45, iCat (ok), 17:54, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ух, ты!!! Теперь ждём альтернативу ed на QT?
    Что ж, JustForFun...
    Кстати, а почему бы не сделать 3-х мерное выделение найденных слов? С музыкальным сопровождением?
     
     
  • 2.51, all_glory_to_the_hypnotoad (ok), 19:40, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    да, кстати, было бы круто. И с возможностью постить найденное сразу в фейсбук или вконтакт
     
     
  • 3.67, redwolf (ok), 15:59, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это можно было бы хотя бы поставить поиграться и поржать. Такие бредовые проэкты периодически возникают. Вроде quake в псевдографике ) В чём fun тут непонятно. Недостатка юзабельности grep за мой стаж общения с linux не замечено.
     

  • 1.47, gegMOPO4 (ok), 18:41, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У Microsoft есть альтернатива grep-у ещё с 3-й версии DOS. Называется find.
     
     
  • 2.48, Аноним (-), 18:49, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Альтернатива - это нечто, сравнимое по функциональности, чего про мсовский файнд не скажешь
     
     
  • 3.50, gegMOPO4 (ok), 18:57, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Какая ОС — такая и альтернатива. Потоковые утилиты в однозадачной системе — то ещё издевательство.
     
  • 2.56, Аноним (-), 21:22, 10/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > У Microsoft есть альтернатива grep-у ещё с 3-й версии DOS. Называется find.

    Уточним, это не альтернатива а жалкая пародия.


     
     
  • 3.66, Andrey Mitrofanov (?), 15:20, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Альтернативон одарённая альтернатива! ---"Нежнее, Владимир."
     

  • 1.52, AHAHAC (ok), 20:32, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Цвет - alias grep='grep --color=yes'
    Возможность использования составных выражений -egrep  
     
  • 1.55, maxkit (ok), 21:08, 10/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Предлагаю написать новый grep на mono, чтобы работал только через браузер, а потом всего лишь парсить результат по скриншоту в браузере, и вставлять этот grep в обязательном порядке во все дистрибутивы.
     
     
  • 2.57, Мяут (ok), 00:17, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    В ChromeOS так и есть я полагаю. :)
     
     
  • 3.59, Аноним (-), 02:27, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > В ChromeOS так и есть я полагаю. :)

    Там на яве мыслить полагается наверное. Ну или хотя-бы на яваскрипте.

     

  • 1.60, anonymous (??), 03:17, 11/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    (задумчиво) а вот у офигенной библиотеки tre в составе идёт agrep. мало того, что сама tre очень шустра (да-да, то самое, что выше в ссылках — fallback только для бэктрэкинга), так оно ещё умеет «приблизительные регэкспы» (то бишь, регэкспы с указаным диапазоном несовпадения). и написано на сях, потому маленькое и шустрое.

    вопрос: этот рубикомбайн (который руби за сабой тянет) — умеет «приблизительные регэкспы» хотя бы? или скорость, как у agrep?

    вопрос риторический, если что.

     
     
  • 2.62, inv (ok), 08:58, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо, интересная библиотека, приму на заметку :)
     
     
  • 3.63, anonymous (??), 09:03, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Спасибо, интересная библиотека, приму на заметку :)

    на здоровье. использую много лет, очень доволен, стррррашных багов не видел. жаль, что все знают про pcre, и почти никто — про tre. по мере сил способствую, так сказать.

     

  • 1.64, kgx (?), 09:36, 11/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    для того, чтобы скипать часть файла есть tail и head, накойхрен это в утилиту поиска вструмлять? каждая программа должна заниматься своим делом, но хорошо. а для чуть более сложных - можно уже и awk с perl использовать.
     
     
  • 2.68, redwolf (ok), 16:04, 11/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    "каждая программа должна заниматься своим делом"

    Это unix-way. Не все его понимают. Смиритесь )

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру