Linux Labs

Bash: обработка текста и скрипты / Ступень 1 из 9

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

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 6 · на машине · 5 мин

Несколько вариантов в одном шаблоне

Ошибки в журнале записаны тремя способами, и одно слово их не описывает. Шаблон может перечислить варианты.

Квадратные скобки — набор: они совпадают с одним любым знаком из перечисленных. [Ee] — E или e, [0-9] — любая цифра, [1-9] — цифра от 1 до 9. Шаблон err=[1-9] совпадёт с err=5 и err=12, а err=0 пропустит.

Ключ -E включает расширенный синтаксис. В нём | разделяет варианты: строка подходит, если в ней совпал хотя бы один. Шаблон берут в одинарные кавычки, чтобы оболочка передала | и скобки grep как есть, а не строила из | конвейер.

bash
grep -E 'ERROR|Error:|err=[1-9]' app.log

Команда печатает восемь строк — все ошибки журнала и ничего лишнего.

Проверь себя 1 вопрос

Коллега набрал поиск без ключа -E: grep 'ERROR|Error:' app.log. Что напечатает grep?

  • Без -E grep не делит шаблон на варианты: ERROR|Error: для него — одна строка из двенадцати знаков, и её нет нигде.

  • Шаблон без -E допустим: grep принял его и не нашёл строк. Сообщения нет, а echo $? после поиска печатает 1.

  • Без -E знак | для grep обычный: он ищет текст ERROR|Error: целиком, а такого в журнале нет.

Без -E знак | для grep обычный, и он ищет текст ERROR|Error: целиком. Такого текста в журнале нет, поэтому вывод пустой. В базовом синтаксисе GNU grep варианты разделяет \|, но с -E шаблон читается проще.

Главное в шаге

  • Квадратные скобки совпадают с одним знаком из набора: [1-9] — цифра от 1 до 9.
  • grep -E делит шаблон знаком | на варианты, и строка подходит по любому из них.
  • Шаблон пишут в одинарных кавычках, иначе | и скобки разберёт оболочка.
Ubuntu 24.04
Загрузка…