Руководство Grep Regex

Команда grep (сокращение от Global Regular Expressions Print) - это мощный инструмент обработки текста для поиска по файлам и каталогам. Когда grep сочетается с regex (регулярными выражениями), расширенный поиск и фильтрация вывода становятся простыми. Системные администраторы, разработчики и обычные пользователи выигрывают от освоения regex с помощью команды grep.

Это руководство на примерах научит вас использовать команду grep с regex.

Необходимые условия

  • Доступ к терминалу/командной строке.
  • Текстовый файл для поиска. В примерах используется файл .bashrc.

Регулярные выражения команды grep

Синтаксис команды grep включает регулярные выражения в следующем формате:

Регулярные выражения - это простые утверждения, которые помогают фильтровать данные и файлы. Многие команды Linux, такие как команда awk или sed, также используют регулярные выражения для поиска и работы с информацией.

Два общих типа символов составляют оператор regex:

  • Литералы, которые являются стандартными текстовыми символами.
  • Специальные символы или метасимволы имеют специальное значение, если они не экранированы обратной косой чертой (\).

 Заключайте выражения regex в одинарные кавычки и экранируйте символы, чтобы избежать интерпретации оболочкой.

Команда grep предлагает три варианта синтаксиса regex:

  1. Базовое регулярное выражение (BRE)
  2. Расширенные регулярные выражения (ERE)
  3. Перл-совместимые регулярные выражения (PCRE)

По умолчанию grep использует синтаксис BRE.

Пример регекса Grep

Выполните следующую команду, чтобы проверить, как работает grep regex:

grep if .bashrc regex пример терминала

Регекс ищет строку символов. Результат показывает все случаи, когда в файле .bashrc за буквой i следует буква f. Таким образом, на выходе получаются следующие результаты:

  • if
  • elif
  • notify
  • identifying

Команда возвращает только те строки, в которых есть совпадение.

Как использовать Regex в Grep

Regex предлагает множество возможностей для уточнения поиска с помощью grep. Ниже приведены некоторые общие примеры, объясняющие основной синтаксис и логику. Комбинируйте совпадения для создания сложных регексов.

Буквальные соответствия

Буквенные соответствия обеспечивают точное совпадение для указанной строки символов. Предыдущий пример выражения if демонстрирует буквенное соответствие.

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

grep регистрозависимый regex терминал

Добавьте опцию -i или --ignore-case для поиска всех возможных комбинаций регистров.

Для поиска нескольких слов добавьте кавычки:

grep if the .bashrc вывод терминала

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

Якорные совпадения

Якорные совпадения определяют местоположение строки в поиске. Существует два типа якорей:

  • Знак каретки (^) ищет строки, начинающиеся с указанного выражения.
  • Знак доллара ($) ищет строки, заканчивающиеся указанным выражением.

Например, чтобы найти строки, начинающиеся со слова alias в файле .bashrc, используйте:

grep alias начало вывода regex терминала

Поиск не отображает строки с табуляцией или пробелами перед словом.

Чтобы найти строки, заканчивающиеся словом then в файле .bashrc, выполните следующее:

grep then$ regex вывод терминала

Используйте оба якоря для создания оператора regex, который ищет одно слово или утверждение в строке:

grep esac однострочный вывод терминала

Используйте только якоря, чтобы найти пустые строки в файле. Добавьте опцию -n, чтобы показать номера строк в выводе:

grep пустые строки вывод терминала

Без опции -n вывод будет пустым.

Соответствие любому символу

Метасимвол регекса точка (.) соответствует любому символу вместо знака. Например:

grep любой символ совпадает с выводом терминала

Вывод покажет все случаи использования буквы r, за которой следует любой символ, а затем o. Точка может быть любым символом, например, буквой, цифрой, знаком или пробелом.

Добавьте несколько точек, чтобы указать несколько символов:

grep многосимвольное соответствие вывода терминала

Для создания сложного оператора regex используйте сочетание с сопоставлением якорей. Например:

grep многосимвольный конечный вывод терминала

Этот оператор находит все строки с любыми двумя символами, за которыми в конце следует буква t.

Выражения со скобками

Выражения со скобками позволяют сопоставить несколько символов или диапазон символов в одной позиции. Например, чтобы найти все строки, содержащие и или end в файле .bashrc, используйте следующий шаблон:

grep скобка конец или и шаблон вывода терминала

Выражения со скобками позволяют исключать символы путем добавления знака каретки (^). Например, чтобы найти все символы, кроме and или end, используйте:

grep exclude скобочное выражение терминальный вывод

Используйте выражения со скобками, чтобы указать диапазон символов, добавляя дефис (-) между первой и последней буквой. Например, поиск всех случаев заглавных букв:

grep заглавные буквы вывод терминала

Комбинируйте выражения со скобками с сопоставлением якорей, чтобы найти все слова, начинающиеся с заглавных букв:

grep строка, начинающаяся с заглавной буквы терминальный вывод

Скобочные выражения позволяют использовать несколько диапазонов. Например, для поиска всех небуквенных символов используйте:

grep символы терминальный вывод

Вывод выделяет числа и символы, игнорируя все буквы.

Классы символов

Grep предлагает стандартные классы символов в качестве предопределенных функций для упрощения скобочных выражений. Ниже приведена таблица, в которой описаны некоторые классы и эквиваленты скобочных выражений.

Синтаксис Описание Эквивалент
[[:alnum:]] Все буквы и цифры. "[0-9a-zA-Z]"
[[:alpha:]] Все буквы. "[a-zA-Z]"
[[:blank:]] Пробелы и табуляции. [CTRL+V<TAB> ]
[[:digit:]] Цифры от 0 до 9. [0-9]
[[:lower:]] Строчные буквы. [a-z]
[[:punct:]] Пунктуация и другие знаки. "[^a-zA-Z0-9]"
[[:upper:]] Прописные буквы. [A-Z]
[[:xdigit:]] Шестнадцатеричные цифры. "[0-9a-fA-F]"

Квантификаторы

Квантификаторы - это метасимволы, которые указывают количество появлений. В следующей таблице показан синтаксис квантификатора grep с кратким описанием.

Синтаксис Описание
* Ноль или более совпадений.
? Ноль или одно совпадение.
+ Одно или несколько совпадений.
{n} n совпадений.
{n,} n или более совпадений.
{,m} До m совпадений.
{n,m} От n до m совпадений.

Знак * соответствует шаблону ноль или более раз. Чтобы продемонстрировать это, выполните следующую команду:

grep asterisk вывод терминала

В данном случае знак * совпадает с буквой m ноль или более раз. Поэтому "and, mand, mmand" - это все совпадения. Буква m повторяется любое количество раз, когда за ней следует знак *.

Чтобы найти нулевое или ровно одно совпадение, используйте знак ? Заключите утверждение в одинарные кавычки и экранируйте символ, чтобы избежать интерпретации. Например:

grep вопросительный знак вывод терминала

В качестве альтернативы используйте расширенные регулярные выражения, чтобы избежать экранирования:

grep расширенное регулярное выражение вывод терминала

Вывод выделяет все случаи использования and или mand.

Используйте квантификаторы диапазона, чтобы указать точное количество повторений. Например, поиск строк с двумя гласными:

grep limit 2 вывод терминала

Вывод выделяет все слова с двумя гласными.

Альтернатива

Альтернатива позволяет определять альтернативные соответствия. Заключите альтернативные строки в одинарные кавычки и отделите каждую из них символом трубы (\|).

Например, для поиска слов bash или alias в файле .bashrc используйте:

grep bash или alias вывод терминала

В качестве альтернативы используйте расширенный regex и опустите управляющий символ:

В результате будут выделены оба экземпляра строк в файле.

Группировка

Регулярные выражения позволяют группировать шаблоны в один элемент. Поместите группу в скобки для регулярного regex или используйте расширенный.

Например, выполните поиск строки bashrc, а символы rc сделайте необязательными:

grep regex группировка вывода терминала

Вывод выделяет все экземпляры bashrc. Поскольку rc не является обязательным, команда также соответствует слову bash.

Специальные выражения обратной косой черты

Команда grep предлагает несколько уникальных выражений обратной косой черты для расширенного сопоставления границ слов. Ниже приведена таблица с краткими примерами для каждого типа выражения.

Синтаксис Пример Соответствия
(Жирным шрифтом выделены совпадения)
\b '\band\b' and
"and"
\and\
<space>and
<tab>and
\B '\Band' _and
_and_
sand
handy
\< '\<and' and
"and"
andy
and_
<space>and
<tab>and
\> 'and\>' and
"and"
sand
_and
<space>and
<tab>and
\w '\wand' _and
_and_
handy
sand
\W '\Wand' "and"
/and/
\s '\sand' <space>and
<tab>and
\S '\Sand' _and
"and"
sand
handy
_and_
/and/

Например, используйте границы \b, чтобы найти слово, которое не является частью другого слова:

grep границы специальная обратная косая черта вывод терминала

Выражение определяет местоположение слов see и set. Граница обеспечивает изоляцию слов.

Экранирование мета-символов

Экранирование мета-символов рассматривает специальные символы как литералы. Например, чтобы найти точку (.) в конце строки, экранируйте мета-символ:

grep специальный символ, соответствующий выводу терминала

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

Заключение

Проработав примеры в этом руководстве, вы освоили операторы grep regex. Поиск в файлах и каталогах с помощью grep regex помогает уточнить поисковую выдачу в соответствии с конкретным случаем использования.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий