grep

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

Синтаксис:

grep [-E|-F] [-chilnqsvx]

[-e выражение | -f файл_выражения]...

[файл...]

grep [-E|-F] [-chilnqsvx] выражение [файл...]

Исторические версии UNIX:

egrep [-cilnqsvx]

[-e выражение | -f файл_выражения]...

[файл...]

egrep [-cilnqsvx] выражение [файл...]

fgrep [-cilnqsvx]

[-e выражение | -f файл_выражения]...

[файл...]

fgrep [-cilnqsvx] выражение [файл...]

Поддерживаемые платформы:

QNX Neutrino, Linux, Microsoft Windows

Опции:

-c

Записать в стандартный поток вывода только число выбранных строк.

-E

Использовать синтаксис расширенных регулярных выражений (extended regular expression; ERE).

-e выражение

Регулярное выражение, тип которого определен в опциях -E, -F. Для определения нескольких выражений можно использовать несколько опций -e.

-F

Обработать выражение как фиксированную строку, а не как регулярное выражение. (Выполнить поиск фиксированной строки или строк.)

-f файл_выражения

Файл с набором регулярных выражений, разделенных символом новой строки. Тип выражений определяется опциями -E и -F. Этот формат используется для определения нескольких выражений. Можно указать несколько опций - f.

-h

(расширение QNX Neutrino только для grep) Не устанавливать имя файла в качестве префикса для совпадающих строк. Эта опция применяется только при вызове утилиты grep с несколькими файлами, в которых осуществляется поиск.

-i

Игнорировать при сопоставлении верхний и нижний регистр.

-l

("эль") Записать в стандартный поток вывода только имена файлов с выбранными строками.

-n

Перед каждой строкой вывода показывать номер строки в файле.

-q

Не записывать данные в стандартный поток вывода независимо от наличия совпадающих строк.

-s

Скрыть сообщения об ошибках, которые обычно выводятся для файлов, которые не существуют или не доступны для чтения. Не скрывать другие сообщения об ошибках.

-v

Выбрать только те строки, которые не совпадают с указанными шаблонами.

-x

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

выражение

Регулярное выражение, тип которого определяется опциями -E и -F. Этот формат используется, если в командной строке указано только одно выражение. Все имена, указанные после этой опции, обрабатываются как входные файлы.

файл


Текстовый входной файл. Значение по умолчанию – стандартный поток ввода.

Описание:

Утилита 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

Произошла ошибка или совпадающие строки не найдены.