Учебное пособие по регулярным выражениям в Linux: пример регулярного выражения Grep

⚡ Умное резюме

Регулярные выражения Linux — это специальные последовательности символов, которые используются для поиска данных и сопоставления сложных шаблонов в таких инструментах, как grep, sed и vi, с применением базовых, интервальных, расширенных и фигурных скобок для точной фильтрации текста.

  • 🔎 Что они: Регулярные выражения, сокращенно regexp или regex, описывают текстовые шаблоны для поиска и сопоставления.
  • 🧩 Базовый набор: Символы, такие как . ^ $ * и \, служат для закрепления, повторения и экранирования символов в шаблоне.
  • 🔢 Интервал: Фигурные скобки, такие как {n} и {n,m}, определяют, сколько раз повторяется предыдущий символ.
  • Extended: При использовании команды grep -E символы \+ и \? соответствуют одному или нескольким и нулю или одному вхождению символа соответственно.
  • 🧵 Расширение скобы: Фигурные скобки позволяют создавать несколько строк из последовательности или списка, разделенного запятыми.
  • 🇧🇷 Где используется: Такие инструменты, как grep, sed, tr и vi, используют регулярные выражения для фильтрации текста.
  • 🤖 Помощь ИИ: Искусственный интеллект и GitHub Copilot позволяют быстро генерировать, объяснять и отлаживать шаблоны регулярных выражений.

Регулярные выражения Linux с использованием grep — примеры базовых, интервальных и расширенных регулярных выражений.

Регулярные выражения — одна из самых мощных функций Linux Инструменты для работы с текстом, позволяющие сопоставлять, фильтровать и преобразовывать данные с помощью компактных шаблонов. На этой странице объясняются базовая, интервальная и расширенная формы, а также расширение скобок, с примерами работы с grep.

Что такое регулярные выражения Linux?

Регулярные выражения Linux — это специальные символы, которые помогают искать данные и сопоставлять сложные шаблоны. Регулярные выражения сокращенно называются «regexp» или «regex». Они используются во многих программах Linux, таких как... GREP, bash, rename, sed и многое другое.

Типы регулярных выражений

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

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

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

Символ Описание
. Заменяет любой символ
^ Соответствует началу строки
$ Соответствует концу строки
* Совпадает с предыдущим символом ноль или более раз.
\ Представляет особые символы
() Группирует регулярные выражения
? Совпадает ровно с одним символом

Рассмотрим пример. Сначала запустите команду `cat sample`, чтобы отобразить содержимое существующего файла, как показано ниже.

Пример команды `cat`, отображающей содержимое существующего файла в терминале.

Далее выполните поиск содержимого, содержащего букву «а». На скриншоте ниже показано, как команда grep возвращает все строки, содержащие букву «а».

Команда `grep` выполняет поиск в образце файла строк, содержащих букву «a».

Символ "^" указывает на начало строки. В приведенном ниже примере выполняется поиск содержимого, начинающегося с буквы "a".

grep с якорем "карет" находит только строки, начинающиеся с буквы "a".

Фильтруются только строки, начинающиеся с этого символа. Строки, не содержащие символ «а» в начале, игнорируются.

Рассмотрим другой пример. На скриншоте ниже снова показано содержимое файла до фильтрации по концу строки.

Отображается пример содержимого файла до фильтрации строк, заканчивающихся буквой «т».

Выделите только те строки, которые заканчиваются буквой «t», используя символ привязки «$», как показано ниже.

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

Интервальные регулярные выражения

Эти выражения указывают количество вхождений символа в строку. Они перечислены ниже.

Выражение Описание
{п} Соответствует предыдущему символу, встречающемуся ровно n раз.
{n, m} Соответствует предыдущему символу, встречающемуся n раз, но не более m.
{н, } Соответствует предыдущему символу только тогда, когда он появляется n раз или более.

Например, отфильтруйте все строки, содержащие символ 'p'. На скриншоте ниже показаны соответствующие строки.

grep фильтрует образец файла, чтобы найти строки, содержащие символ "p".

Теперь проверьте, что символ 'p' встречается в строке ровно два раза подряд. Синтаксис для этого следующий:

cat sample | grep -E p\{2}

Результаты матча в перерыве показаны ниже.

grep -E интервальное выражение, соответствующее символу p, встречающемуся ровно дважды

Примечание. К этим регулярным выражениям необходимо добавить -E.

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

Эти регулярные выражения объединяют более одного выражения. Некоторые из них:

Выражение Описание
\+ Соответствует одному или нескольким вхождениям предыдущего символа
\? Соответствует нулю или одному вхождению предыдущего символа

Например, выполните поиск всех вхождений символа «t». На скриншоте ниже показан результат.

Команда `grep` выполняет поиск в образце файла всех строк, содержащих символ `t`.

Предположим, вы хотите отфильтровать строки, в которых символ 'a' предшествует символу 't'. Вы можете использовать команду, подобную приведенной ниже:

cat sample|grep "a\+t"

Результат показан на следующем скриншоте.

grep расширенное выражение, соответствующее одному или нескольким символам "a", за которыми следует "t".

Расширение скобки

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

Некоторые примеры приведены ниже.

Команда echo с использованием расширения фигурных скобок позволяет сгенерировать несколько строк из последовательности и списка.

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

Часто задаваемые вопросы (FAQ)

Команда `grep` по умолчанию использует базовые регулярные выражения. `egrep` включает расширенные выражения (аналогично `grep -E`), а `fgrep` сопоставляет фиксированные строки без регулярных выражений (`grep -F`). В современных версиях GNU `grep` и `fgrep` помечены как устаревшие, поэтому предпочтительнее использовать `grep -E` и `grep -F`.

Классы символов соответствуют категории символов. Скобочные выражения, такие как [az], соответствуют диапазону, а классы POSIX, такие как [[:alpha:]], [[:digit:]] и [[:space:]], соответствуют буквам, цифрам и пробелам. Они обеспечивают читаемость и переносимость шаблонов в разных языковых версиях.

Добавьте опцию -i, например, grep -i “hello” sample. Это соответствует запросам Hello, HELLO и hello. Без опции -i регулярные выражения чувствительны к регистру, поэтому заглавная буква и её строчная форма рассматриваются как два разных символа.

Использование символов-заменителей (глоббинг) в командной оболочке расширяет имена файлов, где * означает любые символы, а ? — один символ. Регулярные выражения сопоставляют текст внутри файлов, где * означает ноль или более предшествующих символов. Одни и те же символы имеют разное значение в каждом контексте.

Используйте опцию -o, например, grep -o “a\+t” sample. Вместо вывода всей строки, grep выводит только ту часть, которая соответствует шаблону, по одному совпадению на строку. Это полезно, например, дляtracтакие значения, как адреса электронной почты или числа.

Используйте чередование с символом вертикальной черты. В расширенном режиме команда `grep -E “cat|dog” sample` находит строки, содержащие слова «cat» или «dog». В базовом режиме необходимо экранировать этот символ как `grep “cat\|dog” sample`. Чередование позволяет одной команде искать несколько шаблонов одновременно.

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

Да. Второй пилот GitHub Функция предлагает команды grep и регулярные выражения непосредственно из комментария или частичного шаблона по мере ввода текста. Это ускоряет написание сложных выражений, хотя перед использованием любого сгенерированного шаблона следует проверить его на реальных примерах данных.

Подведем итог этой публикации следующим образом: