LINUX.ORG.RU

Grep


20

0

Всего сообщений: 15

Состоялся релиз ack 3.0.0

Состоялся релиз ack 3.0.0
Группа Open Source

Состоялся стабильный релиз утилиты ack 3.0.0. ack - это аналог grep'а, но для программистов, который написан на Perl'е.

( читать дальше... )

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

 ,

saahriktu
()

Вышел GNU grep 3.2

Группа GNU's Not Unix

Почти через полтора года после релиза версии 3.1 вышел GNU grep 3.2.

( читать дальше... )

>>> Скачать

 ,

saahriktu
()

GNU grep 2.25

Группа GNU's Not Unix

В пятницу 22 апреля вышла новая стабильная версия GNU grep. За 6 недель, прошедших с предыдущего релиза 2.24, было сделано 15 коммитов от 2 человек.

Исправленные ошибки:

  • При локали C или POSIX grep теперь воспринимает любой байт как допустимый символ, то есть, теперь не будет «Binary file F matches» при этих локалях.
  • grep -Pz больше ошибочно не диагностирует последовательности вроде [^a]. ошибка возникла в grep 2.24.
  • grep -oz теперь использует байты со значением 0, а не \n для завершения строки. Ошибка возникла в grep-2.5.

Улучшения:

  • grep теперь выводит больше подробностей при ошибке записи. Например: «grep: write error: No space left on device», а не просто «grep: write error».

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

 ,

Psych218
()

GNU Grep 2.21

Группа GNU's Not Unix

Вышла новая стабильная версия программы GNU Grep 2.21. За 25 недель 3 разработчика сделали 94 коммита.

Итогом их работы стали следующие улучшения:

  • значительно увеличена скорость работы с файлами, содержащими пустые области, на тех платформах, где эффективно работает флаг SEEK_DATA системного вызова lseek;
  • более эффективно обрабатываются случаи, когда данные не соответствуют первой части сложного паттерна;
  • увеличена производительность при работе с очень длинными строками в паттернах:
  • если файл содержит некорректные для текущей локали данные, и это удаётся обнаружить до того, как начался вывод, grep рассматривает данный файл как бинарный;
  • grep -P больше не прекращает работу с сообщением об ошибке, если встречает некорректные данные в кодировке UTF-8, теперь эти данные просто считаются не соответствующими шаблону.

Также были внесены исправления ошибок:

  • исправлена работа \w и \W в мнгогобайтовых локалях;
  • исправлен подсчет строк при работе в не-UTF-8 многобайтовых локалях, для проверки предлагается запустить, например, seq 10 | env LC_ALL=zh_CN grep -n .." (ошибка появилась в версии 2.19);
  • grep -F -x -o больше не печатает лишний символ новой строки для каждой «находки» (ошибка тоже появилась в 2.19);
  • исправлена работа grep -F в многобайтовых не-UTF-8 локалях;
  • изменена работа с непарными ')' в grep -E, для совместимости с BusyBox, FreeBSD, Solaris и вообще POSIX. Раньше было так: $ echo ')' | grep -E ')' grep: Unmatched ) or \) а теперь же всё работает;
  • исправлена работа с символическими ссылками в NetBSD.

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

 ,

anarquista
()

GNU Grep 2.20: исправление ошибок

Группа GNU's Not Unix

Вскоре вслед за выходом версии 2.19 выходит новая, в которой исправлено несколько ошибок:

  • grep --max-count=N FILE ранее не прекращало чтение файла после N-го совпадения, вывод был корректным, однако чтение файла продложалось (и могло продолжаться бесконечно), эта ошибка появилась в версии 2.19;
  • Такие команды, как echo aa | grep -E 'a(b$|c$)' могли ошибочно напечатать ввод, как строку, соответствующую паттерну.

Кроме того, эта версия содержит изменение в поведении:

  • grep --exclude-dir='FOO/' теперь действительно исключает директорию FOO, ранее слэш в конце lделал опцию бесполезной.

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

 ,

anarquista
()

GNU Grep 2.19: быстрее от 10 до 200 раз

Группа GNU's Not Unix

Cегодня вышла новая версия программы GNU Grep 2.19. Джим Мейеринг (Jim Meyering) сообщает, что за 13 недель, прошедших со времени выхода прошлой версии, 4 разработчика сделали 152 коммита. Особое спасибо Норихиро Танака (Norihiro Tanaka) и Паулю Эггерту (Paul Eggert).

Улучшения

  • Значительно улучшена производительность, в типичных случаях на 10% и в некоторых случаях в 200 раз. Однако, производительность grep -P (то есть, при работе с регулярными выражениями с стиле Perl) в юникодных локалях стала только хуже. Это связано с исправлениями ошибок, которые могли приводить к падениям (см. ниже).

Исправление ошибок

  • grep больше не ошибается при работе с паттернами вида [a-[.z.]] ([.z.] обозначает collating symbol) Например, раньше в испаноамериканской локали grep работал неверно, а теперь работает правильно:
    echo b | LC_ALL=es_US.UTF-8 grep '[a-[.ch.]]'
    echo $ echo b | LC_ALL=es_US.UTF-8 ../src/grep '[a-[.ch.]]'
    b
    
    Также исправлена ошибка, когда неправильно обрабатывались регулярные выражения типа [^a], где a — collating symbol.
  • grep больше не ошибается с пустыми регулярными выражениями, когда они присутствуют в списке паттернов. Если в списке паттернов присутствует пустая строка, то должны находиться все исходные строки. Например, в 2.18:
    $ pat='hello
    '
    $ echo world | grep -e "$pat"
    world
    $pat='\(\)\1hello
    '
    # ошибка!
    $ echo world | grep -e "$pat"
    $
    
    (эта ошибка появилась в версии 2.5);
  • grep -C NUM педантично печатает разделитель, когда NUM равно 0, аналогично для -A и -B (ошибка присутствовала изначально);
  • grep, grep -F, grep -E теперь обрабатывают ошибки в кодировке паттернов таким же образом, как их обрабатывает движок обработки регулярных выражений GNU, учитывая, может ли ошибка находить части многобайтовых символов в данных (ошибка присутствовала изначально).
  • grep -w теперь правильно работает в многобайтовых локалях. То же касается паттернов '\<', '\>', '\b', '\B':
    # grep 2.18
    $ echo 'Привет, Мир' | grep '\<М'
    $
    # grep 2.19
    $ echo 'Привет, Мир' | grep '\<М'
    Привет, Мир
    $
    
    (ошибка присутствовала изначально);
  • grep -P теперь сообщает об ошибке и выходит, когда на вход поступают некорректные данные в кодировке UTF-8. Раньше программа могла упасть или зациклиться (ошибка появилась в grep-2.16);
  • grep -Pw теперь работает аналогично grep -w, искомая строка должна быть окружена символами, которые не могут быть частью какого-либо слова. Ранее, например, echo a@@a| grep -Pw @@ находила строку, а cho a@@a| grep -w @@ — нет. Теперь работают одинаково и строку не находят.
  • grep -i теперь правильно обрабатывает паттеры, содержащие символы в верхнем регистре. Например, в локали, содержащей символ 'Lj' (U+01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J), 'grep -i Lj' теперь находит и строку 'LJ' (U+01C7 LATIN CAPITAL LETTER LJ), и lj' (U+01C9 LATIN SMALL LETTER LJ).

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

 

anarquista
()

Стабильный выпуск grep-2.18

Группа GNU's Not Unix

Вышел grep-2.18, баг-фикс предыдущей версии.
Основные исправления (git лог):

  • grep правильно работает в комбинациях [^^-~] в однобайтовых локалях.
  • Исправлена ошибка, которая в версии 2.17 по сравнению с 2.16 могла приводить к 200-кратному замедлению работы grep -i во многобайтовой не-UTF8 локали.

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

 ,

record
()

GNU Grep 2.17: десятикратный рост производительности

Группа GNU's Not Unix

Вышла новая версия GNU Grep 2.17. Разработчики заявляют о десятикратном росте производительности, собственно, это и есть главное изменение.

  • grep -i стал работать в 10 раз быстрее в многобайтовых локалях для регулярных выражений, не содержащих \ или [;
  • grep (без -i) стал работать в более чем 7 раз быстрее в многобайтовых локалях, когда обрабатывается много строк с совпадениями;
  • полностью убрана устаревшая опция grep --mmap, которая не используется с января 2012-го года.

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

 ,

anarquista
()

GNU Grep 2.15

Группа GNU's Not Unix

26 октября вышла новая версия программы GNU Grep — 2.15. Выпуск связан главным образом с исправлением ошибок. Прошло 62 недели, за это время 9 человек сделали 57 коммитов.

Были исправлены следующие ошибки:

  • \s и \S неправильно работали с пробельными символами длиной в несколько байт. Например, выражение \s неправильно работало с неразрывным пробелом. Например, вот: printf '\xc2\xa0' | LC_ALL=ru_RU.UTF-8 grep '\s'. Ошибка появилась в версии 2.6;
  • grep -i могла вызывать ошибку сегментирования в системах, использующих wchar_t, основанный на кодировке UTF-16 (например, Cygwin). Ошибка возникала, когда нужно было перевести в нижний регистр входную строку, содержащую определенную 4-байтовую последовательность (ошибка присутствовала с версии 2.6, но проявляться в виде ошибки сегментирования начала только в версии 2.13;
  • grep -E могла завершиться с ошибкой сегментирования при обработе регулярных выражений вида '([^.]*[M]){1,2}', где M — многобайтовый символ. Ошибка появилась в версии 2.6, пропала в версиях 2.7 и 2.8. Все версии, начиная с 2.9, работают с ошибкой;
  • grep -F могла попадать в бесконечный цикл, когда искомая строка содержит некорректную в текущей локали последовательность байтов:
  • grep -P могла работать неправильно с многобайтовыми символами.

Новые улучшения:

  • grep -P теперь использует jit-компиляцию, что значительно ускоряет работу. Это реализовано совершенно прозрачно для пользователя, не нужно устанавливать никаких флагов и т.п. Эта возможность включается на этапе компиляции, если обнаружена подходящая версия библиотеки pcre.

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

 ,

anarquista
()

Уязвимость в утилите grep

Группа Безопасность

В утилите GNU grep обнаружена опасная уязвимость, которая проявляется при обработке входного потока и может быть использована для инициирования отказа в обслуживании и выполнения произвольного кода.

Уязвимы версии grep до версии 2.11 при обработке строки данных более 2 Гб на 64-битном хосте.

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

Команда для проверки уязвимости:

perl -e 'print "x"x(2**31)' | grep x > /dev/null
Ошибка сегментирования означает наличие уязвимости.

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

 ,

kerneliq
()

GNU grep 2.13

Группа GNU's Not Unix

4 июля Джим Мейеринг сообщил о выходе очередной версии GNU grep. За десять недель разработки 4 программиста сделали 24 коммита, отмечает он.

Исправлено две ошибки появившиеся в версии 2.6:

  • grep -i в многобайтовых локалях теперь правильно выводит строки, содержащие буквы, чьё представление в верхнем и нижнем регистре занимает различное число байтов. Это, например, «и-с-точкой» в турецком языке. Прежние версии GNU grep могли либо пропустить часть строки, либо, наоборот, вывести мусор;
  • опции --include и --exclude теперь снова можно совмещать друг с другом. Так, «grep --include='*.[ch]' --exclude='system.h' PATTERN *» читает все файлы *.c и *.h, кроме system.h.

Новые особенности:

  • grep без опции -z теперь считает разреженные файлы бинарными, если можно легко определить, что файл действительно разреженный.

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

 ,

anarquista
()

GNU grep 2.11

Группа GNU's Not Unix

За два с половиной месяца, что прошли после выхода 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

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

 ,

anarquista
()

GNU grep-2.10: исправление ошибок

Группа GNU's Not Unix

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

Спустя пять месяцев разработки после выхода grep-2.9 Джим Мейеринг (Jim Meyering)объявил о выходе новой версии. Больших изменений нет. Однако, было сделано много изменений gnulib, включая ряд улучшений переносимости. Часть этих изменений затрагивает и grep.

Достаточно значительные изменения:

  • grep больше не ошибается при обработке байтов с установленным старшим битом при работе в системах, где «char» — это знаковый тип (ошибка появлялась только в MS Windows);
  • grep теперь отклоняет такие команды как
    grep -r pattern . > out
    , в которых файл ввода также является и выводом, так как это может вызывать бесконечные циклы.

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

 ,

anarquista
()

GNU grep 2.9

Группа GNU's Not Unix

21 июня Jim Meyering оповестил сообщество о выходе новой версии программы GNU grep 2.9. Изменения заключают в себе исправление ошибок, прежде всего, это существенное увеличение производительности при работе с диапазонами многобайтовых символов (типа '[áéíóú]'). Спасибо Paolo Bonzini за эту работу!

Другие исправления:

Расширенные регулярные выражения типа '(^| )*( |$)' теперь не разносят кучу (ошибка появилась в grep-2.6).

grep -P больше не вылетает, когда достигается предел PCRE при поиске с возвратом. Ранее например, echo aaaaaaaaaaaaaab |grep -P '((a+)*)+$' прекращала работу аварийно. Теперь нет. Теперь выводится сообщение о проблеме и происходит корректное завершение работы с кодом 2.

Устранены проблемы при работе с символами в диапазоне 0x80..0xff, существовавшие в некоторых нетривиальных локалях (например, ru_RU.KOI-8). Ранее команда echo c | grep '[c]' при 'c' в указанном диапазоне давала некорректный результат (ошибка появилась в версии grep-2.6).

Исходные коды доступны по ссылке: http://ftp.gnu.org/gnu/grep/grep-2.9.tar.xz

>>> Подробности на Саванне

 ,

anarquista
()

новый релиз gnu grep - 2.8

Группа GNU's Not Unix

как сообщает Jim Meyering, вышла версия 2.8 популярной программы gnu grep для поиска строк, отвечающих заданному регулярному выражению.

распространяется программа под лицензией gnu gpl версии 3.

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

  • команда echo c | grep '[c]' не находила совпадений при любом «c» в диапазоне 0x80..0xff во многих локалях. например, printf '\xff\n'|grep «$(printf '[\xff]')» || echo FAIL печатало «FAIL» вместо ожидающейся строки с совпадением.
  • интерпретация grep-ом диапазонов сейчас более согласована с поведением других инструментов.
  • программа ошибочно завершала работу с кодом возврата 1 при некоторых ошибках в отведении памяти.

домашняя страница проекта

исходные тексты

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

 , ,

sash-kan
()