grep

Поиск строк по шаблонам (POSIX)

Синтаксис:

grep [-E|-F] [-chilnqsvx] [-e expression | -f expression_file] ... [file...] 
grep [-E|-F] [-chilnqsvx] expression [file...]

Опции:

-c
Записать в стандартный поток вывода только число выбранных строк.
-E
Использовать синтаксис расширенных регулярных выражений (extended regular expression; ERE).
-e выражение
Регулярное выражение, тип которого определен в опциях -E, -F. Для определения нескольких выражений можно использовать несколько опций -e.
-F
Обработать выражение как фиксированную строку, а не как регулярное выражение. (Выполнить поиск фиксированной строки или строк.)
-f файл_выражения
Файл с набором регулярных выражений, разделенных символом новой строки. Тип выражений определяется опциями -E и -F. Этот формат используется для определения нескольких выражений. Можно указать несколько опций -f.
-h
(расширение ЗОСРВ «Нейтрино» только для grep) Не устанавливать имя файла в качестве префикса для совпадающих строк. Эта опция применяется только при вызове утилиты grep с несколькими файлами, в которых осуществляется поиск.
-i
Игнорировать при сопоставлении верхний и нижний регистр.
-l
("эль") Записать в стандартный поток вывода только имена файлов с выбранными строками.
-n
Перед каждой строкой вывода показывать номер строки в файле.
-q
Не записывать данные в стандартный поток вывода независимо от наличия совпадающих строк.
-s
Скрыть сообщения об ошибках, которые обычно выводятся для файлов, которые не существуют или не доступны для чтения. Не скрывать другие сообщения об ошибках.
-v
Выбрать только те строки, которые не совпадают с указанными шаблонами.
-x
Считать совпадающими только строки ввода, полностью соответствующие фиксированной строке или регулярному выражению.
выражение
Регулярное выражение, тип которого определяется опциями -E и -F. Этот формат используется, если в командной строке указано только одно выражение. Все имена, указанные после этой опции, обрабатываются как входные файлы.
файл
Текстовый входной файл. Значение по умолчанию – стандартный поток ввода.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

Утилита grep осуществляет во входных данных поиск строк, совпадающих с данным выражением (данными выражениями). Если строка ввода совпадает с любым из выражений, она считается "выбранной". По умолчанию выбранные строки записываются в стандартный поток вывода.

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

Утилита grep распознает три типа регулярных выражений: базовые, расширенные и фиксированные. Если опции -E или -F не указаны, то выражение (или выражения) используется как базовое регулярное выражение.

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

В регулярных выражениях присутствует "невидимый" оператор, т.е. конкатенация. Конкатенация двух выражений означает сопоставление левой, а затем правой части.

Наименьшим выражением является один символ.

Базовые регулярные выражения

В следующей таблице представлены базовые регулярные выражения и приоритет операторов:

Выражение Значение
\( выражение \) Подвыражение. Сопоставление с шаблоном выражение. Используется для обратных ссылок (см. далее) и приоритета
\N Обратная ссылка. Сопоставление целиком со строкой, созданной подвыражением N.
. (точка) Сопоставление с одним символом.
[набор_символов] Сопоставление с любым компонентом набора набор_символов (см. далее).
c Сопоставление с неспециальным символом.
\c Сопоставление с литералом c. Не допускаются символы (, ), {, } или любые цифры от 1 до 9. Символ \, как правило, используется для экранирования *, $, ^, ., [ и ]. Символы \\ соответствует литералу "\". Для символа \ внутри выражения в прямых скобках специальное значение не определено.
ограниченное_выражение* Сопоставление с любым числом повторений значения ограниченное_выражение, включая нуль.
ограниченное_выражение\{M\} Сопоставление с ровно M повторений значения ограниченное_выражение.
ограниченное_выражение\{,N\} Сопоставление с количеством повторений значения ограниченное_выражение от нуля до N.
ограниченное_выражение\{M,N\} Сопоставление с количеством повторений значения ограниченное_выражение от M до N.
выражение0выражение1 Конкатенация. Сопоставление со значением выражение0, затем с выражение1.
^выражение Сопоставление со значением выражение только в начале строки.
выражение$ Сопоставление со значением выражение только в конце строки.

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

Набор_символов создается путем конкатенации следующих операторов:

Выражение Значение
c Любой символ c
c-d Любой символ в диапазоне от c до d
[:alpha:] Любой буквенный символ
[:upper:] Любой символ верхнего регистра
[:lower:] Любой символ нижнего регистра
[:digit:] Любой числовой символ
[:alnum:] Любой числовой или буквенный символ
[:xdigit:] Любой символ, используемый для представления числа в шестнадцатеричном формате
[:space:] Любой символ, который является пробельным
[:print:] Любой печатаемый символ
[:punct:] Любой символ пунктуации
[:graph:] Любой символ с графическим представлением
[:cntrl:] Любой управляющий символ

Если набор_символов начинается с символа вставки "^" (^), он инвертируется. Пример:

[^[:alpha:]]

означает сопоставление с любым небуквенным символом. (Также может быть выражен в виде [^a-zA-Z].)

Расширенные регулярные выражения

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

Список расширенных регулярных выражений:

Выражение Значение
(выражение) Выполнить сопоставление со значением выражение; целесообразно при изменении приоритета.
. (точка) Сопоставление с одним символом.
c Сопоставление с любым неспециальным символом c.
\c - Сопоставление с литералом c. Как правило, используется для экранирования специальных символов расширенных регулярных выражений.
[набор_символов] Сопоставление с любым элементом набора набор_символов.
ограниченное_выражение* Сопоставление с любым числом, в т.ч. с нулевым, повторений выражения ограниченное_выражение.
ограниченное_выражение+ Сопоставление с числом повторений от 1 и выше выражения ограниченное_выражение.
ограниченное_выражение? ограниченное_выражение не обязательно (сопоставление с числом повторений 0 или 1).
ограниченное_выражение\{M\} Сопоставление с ровно M повторений значения ограниченное_выражение.
ограниченное_выражение\{,N\} Сопоставление с количеством повторений значения ограниченное_выражение от нуля до N.
ограниченное_выражение\{M,N\} Сопоставление с количеством повторений значения ограниченное_выражение от M до N.
выражение0выражение1 Конкатенация. Сопоставление со значением выражение0, затем с выражение1.
выражение0|выражение1 Чередование. Сопоставление с выражением выражение0 или выражение1 (не одновременно).
^выражение Сопоставление со значением выражение только в начале строки.
выражение$ Сопоставление со значением выражение только в конце строки.

Для расширенных регулярных выражений ограниченное_выражение ограничено выражением, соответствующим одному символу или выражению в круглых скобках.

Фиксированные регулярные выражения

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

Примеры:

Вывод в файл Phone.List строк с телефонными номерами:

grep '[[:digit:]]\{3\}-[[:digit:]]\{4\}' Phone.List

Вывод всех вхождений слов "steve" и "barney" в файл Phone.List:

grep -F -e steve -e barney Phone.List

Возвращаемое значение:

0
Найдены строки, совпадающие с указанным выражением.
>0
Произошла ошибка или совпадающие строки не найдены.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», POSIX

В ЗОСРВ «Нейтрино» редакции 2020 утилита обновлена до версии 3.6 (замена прежней реализации)

Тематические ссылки:

egrep, fgrep, flex, gawk, sed,




Предыдущий раздел: Утилиты