Поиск строк по шаблонам (POSIX)
grep [-E|-F] [-chilnqsvx] [-e expression | -f expression_file] ... [file...]
grep [-E|-F] [-chilnqsvx] expression [file...]
ЗОСРВ «Нейтрино»
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
Базовые подсистемы ЗОСРВ «Нейтрино», POSIX
ЗОСРВ
«Нейтрино»
редакции 2020
утилита обновлена до версии 3.6 (замена прежней реализации) egrep, fgrep, flex, gawk, sed,
Предыдущий раздел: Утилиты