← Linux: инструменты
12 мин · средне · Урок 3 из 4

Регулярные выражения (grep -E, sed)

Базовый синтаксис регулярок: якоря, классы, кванторы, группы. Поиск через grep -E и замена через sed.

Зачем регулярки

В уроке про pipes мы фильтровали логи через grep по простой строке. Но часто нужно найти не точное слово, а шаблон: все IP-адреса, все строки с кодом ошибки 5xx, все email. Для этого есть регулярные выражения (regex). Это язык описания шаблонов текста, и он одинаков (с мелкими отличиями) в grep, sed, awk и большинстве языков программирования.

Якоря и классы символов

Базовые кирпичи:

$ grep -E "^ERROR" app.log        # строки, начинающиеся с ERROR
$ grep -E "[0-9]{3}$" app.log     # строки, кончающиеся тремя цифрами

Флаг -E включает расширенный синтаксис (ERE), где +, ?, |, () работают без экранирования. Без -E их пришлось бы писать как \+, \?. Поэтому grep -E берут по умолчанию.

Кванторы

Кванторы говорят, сколько раз повторяется предыдущий элемент:

$ grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.log

Это грубый шаблон IP-адреса: четыре группы из 1–3 цифр, разделённые точками. Точку экранируют как \., потому что без экранирования . это «любой символ».

Группы и альтернатива

() группируют, | это «или»:

$ grep -E "(GET|POST) /api" access.log    # строки с GET или POST к /api

Группа (GET|POST) находит любой из вариантов. Группы ещё используются в замене, чтобы ссылаться на найденное.

Замена через sed

grep находит, sed заменяет по шаблону. Синтаксис s/шаблон/замена/:

$ echo "user=alice" | sed -E 's/user=(.+)/login: \1/'
login: alice

Группа (.+) запоминает найденное, а \1 подставляет его в замену. Так переформатируют строки по шаблону. Флаг g в конце (s/.../.../g) заменяет все вхождения в строке, а не только первое. Из урока про sed: sed -i правит файл на месте.

Что важно запомнить

Регулярка — шаблон текста: якоря (^/$), классы ([a-z]), любой символ (.), кванторы (*/+/?/{n,m}), группы и альтернатива ((a|b)). Точку как символ экранируют (\.).

grep -E "шаблон" ищет по шаблону, sed -E 's/что/на_что/g' заменяет, а группы (...) запоминают найденное и подставляются через \1. Флаг -E включает удобный расширенный синтаксис.

В следующем уроке разберём архивы: tar, сжатие и распаковку.

Прошли материал до конца? Отметьте урок пройденным.