LINUX.ORG.RU

GNU grep 2.11

 ,


0

1

За два с половиной месяца, что прошли после выхода GNU grep 2.10, рассказывает разработчик GNU grep Jim Meyering, произошло больше изменений, чем за 5 месяцев разработки grep 2.10, при этом обнаружилось неожиданно много старых ошибок. Отдельное спасибо Paulo Bonzini и Paul Egger за их патчи.

Заметные изменения

  • Новые особенности
    • Если не задан файловый операнд и задана опция -r или равнозначная ей, grep теперь выполняет поиск в текущей директории. Прежде grep игнорировала опцию -r и работала с входящим потоком. Опция -r в переменной GREP_OPTIONS не даёт такого эффекта;
    • добавлена подсветка цветом совпадений в MS Windows.
  • Исправленные ошибки
    • grep больше не падает, когда длина строк не укладывается в 'int' (длиннее 2 GiB на типичной 64-битной системе). Теперь grep либо отрабатывает, как и ожидалось, либо сообщает об ошибке. Ошибка может происходить, если недостаточно памяти, либо если функции для работы с регулярными выражениями в библиотеке GNU C не поддеживают столь длинные строки [ошибка присутствовала от начала времен];
    • использование опций -m, -A, -B, -C больше не приводит к перемешиванию строк, когда их число не укладывается в 'int'. Кроме того, количество строк, выводимых grep -c, теперь ограничено значением 'intmax_t' (обычно менее 2^63), а не 'int' (обычно менее 2^31);
    • ранее grep «молча» пропускала ошибки, когда вместо ожидаемого текстового файла была задана директория. Теперь же сообщение об ошибке выводится. Например, теперь команда `grep x .' сообщает об ошибке чтения, а не игнорирует её, как раньше [ошибка появилась в версии grep-2.5];
    • grep завершается с кодом ошибки 2, если обнаружено зацикливание директорий. Ранее grep завершалась с кодом ошибки 0 или 1 [ошибка появилась в версии grep-2.3];
    • опция -s теперь подавляет сообщения об ошибках с входным потоком, которые раньше не подавлялись. Сюда относятся ошибки при закрытии потока, при использовании функции lseek или же когда входной и выходной потоки совпадают [ошибка появилась в версии grep-2.4];
    • на системах POSIX, команды вроде «grep < FILE >> FILE» теперь сообщают об ошибке, вместо зацикливания [ошибка присутствовала с самого начала];
    • опции --include, --exclude и --exclude-dir теперь обрабатываются более последовательно. --include и --exclude теперь применяются только к недиректориям, а --exclude-dir — только к директориям. При этом "-" (стандартный вывод) никогда не исключается, так как это не имя файла [ошибка появилась в версии grep-2.5];
    • grep больше не отбрасывает команды «grep -qr . > out», такие, где задана опция -q и файлы ввода и вывода совпадают. В этом нет надобности, опция -q подавляет вывод, и нет опасности зацикливания или состояния гонок. Thus, the use of the following options also disables the input-equals-output failure:
      • --max-count=N (-m) (for N >= 2)
      • --files-with-matches (-l)
      • --files-without-match (-L)
      [ошибка появилась в grep-2.10];
    • grep больше не сообщает об ошибке и завершает работу на MS-Windows, когда запущена с опцией -r;
    • grep больше не ошибается при обработке регулярных выражений, где чередования включают «якоря» (^, $, \<, \>, \b, \B). Например, `grep -E "(^|\B)a" больше не сообщает о совпадении для строки «x a» [ошибка присутствовала с начала разработки grep];
  • Изменения в поведении
    • при использовании опции --mmap выводится предупреждение. Эта опция ни на что не влияет с марта 2010-го года;
    • grep больше не сообщает об ошибках записи повторно; теперь grep завершает работу после обнаружения первой же ошибки. Такое поведение лучше при работе с повисшим туннелем;
    • синтаксические ошибки в GREP_COLORS теперь просто игнорируются, без предупреждений. Такое поведение более согласовано с другими программами, которые, для примера, игнорируют ошибки в termcap.

Исходные коды программы доступны для скачивания: http://ftpmirror.gnu.org/grep/grep-2.11.tar.xz

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

★★★★★

Проверено: tazhate ()

Если не задан файловый операнд и задана опция -r или равнозначная ей, grep теперь выполняет поиск в текущей директории

джва года …

anonymous ()

Если не задан файловый операнд и задана опция -r или равнозначная ей, grep теперь выполняет поиск в текущей директории. Прежде grep игнорировала опцию -r и работала с входящим потоком. Опция -r в переменной GREP_OPTIONS не даёт такого эффекта;

Когда добавят программу для пересылки почты?

anonymous ()

А ещё там починили собственные regex, точнее включили gnulib. Теперь grep -E '[[:space:]]' и т. п. работает. А раньше отваливалось с сообщением «Unmatched [ or [^»

r2d2 ()

Очень не хватает контекстнозависимого grep, а в частности для C/C++. Например хочу вырезать функцию. Уж чем думали создатели этих языков... Гораздо лучше как в Assembler или Python - одна операция - одна строка...

xor2003 ()

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

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

Мощная замена grep для программистов: https://github.com/petdance/ack

ack is not intended to be a general-purpose replacement for grep. ack is for searching source code of defined file types.

Ты видать слишком Ъ.

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

Очень не хватает контекстнозависимого grep, а в частности для C/C++.

Что не так с awk?

anonymous ()

кого интересуют изменения в grep для MS Windows?

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

кого интересуют изменения в grep для MS Windows?

К примеру, меня. А что?

dexpl ★★★★★ ()

Удивительный фейерверк бесполезных дополнений. Спасибо !

dmitry_malikov ★★ ()

Если не задан файловый операнд и задана опция -r или равнозначная ей, grep теперь выполняет поиск в текущей директории.

А Ватсон без трубки^WWWWТочку всё равно буду ставить.

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

кого интересуют изменения в grep для MS Windows?

Половину обитателей ЛОРа.

anonymous ()

Разное поведение программы когда ожидается одинаковое — это плохо

Опция -r в переменной GREP_OPTIONS не даёт такого эффекта;

Xenius ★★★★★ ()

теперь выполняет поиск в текущей директории. Прежде grep игнорировала опцию -r и работала с входящим потоком.

Крайне позитивное изменение! Наконец-то «человеческий» вызов команды возобладал.

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

Гораздо лучше как в Assembler или Python - одна операция - одна строка...

Не могли бы вы расширить это замечание, а то выглядит как бред!

Например хочу вырезать функцию.

Grep - ТЕКСТОВАЯ утилита, от неё нечего ждать.
По идее (если вы видели хоть раз текст функции), можно искать так:

*шаблон заголовка функции*
*пробелы*{
...пропускаем....
*пробелы*}

Т.е. конец функции - это столько же пробелов от её открывающей скобки, плюс закрывающая.

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

это был риторический вопрос, как напимер: «кто виноват?» и «что делать?».

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

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

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

столько же пробелов от её открывающей скобки, плюс закрывающая.

вот ни разу не критерий

marvin_yorke ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.