0Pricing
DevOps Bootcamp · Урок

Сочетание регулярных выражений с sed и awk

Встраивайте регулярные выражения в команды «sed» и «awk» для расширенной фильтрации, замены текста и извлечения данных.

«Сочетание регулярных выражений с sed и awk» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

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

Добро пожаловать на заключительный урок по регулярным выражениям! Мы изучили возможности регулярных выражений для поиска по шаблонам.

Теперь объединим эти возможности с двумя важными инструментами Linux: sed (потоковым редактором) и awk (языком сканирования и обработки шаблонов). Такая комбинация позволяет выполнять продвинутую фильтрацию и замену текста, а также извлекать данные.

sed: фильтрация с помощью регулярных выражений

sed может использовать регулярные выражения для фильтрации строк. Адрес /pattern/ позволяет sed применять команды только к строкам, соответствующим заданному регулярному выражению.

Параметр -n отключает вывод по умолчанию, а p явно выводит соответствующие строки.

echo -e "apple
banana
orange" | sed -n '/an/p'

sed: замена с помощью регулярных выражений

Команда s/regex/replacement/ в sed позволяет в полной мере использовать возможности регулярных выражений для преобразования текста. С её помощью можно заменить найденные регулярным выражением шаблоны новым текстом.

Флаг g заменяет все вхождения в строке, а i отключает учёт регистра при сопоставлении.

echo "Hello world, hello universe" | sed 's/hello/hi/gi'

sed: захватывающие группы и обратные ссылки

Регулярные выражения позволяют задавать захватывающие группы с помощью круглых скобок (). Затем на текст, найденный этими группами, можно ссылаться в строке замены с помощью обратных ссылок, таких как \1, \2 и т. д.

Используйте -E с sed для синтаксиса расширенных регулярных выражений (например, для () без экранирования).

echo "Doe, John" | sed -E 's/([A-Za-z]+), ([A-Za-z]+)/\2 \1/'

awk: фильтрация записей с помощью регулярных выражений

awk использует шаблоны регулярных выражений для выбора записей (строк) перед выполнением действий. Если перед блоком действий {...} указан шаблон, действие выполняется только для строк, соответствующих этому шаблону.

Это похоже на grep, но позволяет выполнять более сложную обработку.

echo -e "Line 1: apple
Line 2: banana
Line 3: orange" | awk '/banana/'

awk: регулярные выражения для отдельных полей

В awk можно применять шаблоны регулярных выражений к отдельным полям с помощью операторов ~ (соответствует) и !~ (не соответствует). Это особенно мощный инструмент для работы со структурированными данными.

Например, $1 ~ /pattern/ проверяет, соответствует ли первое поле регулярному выражению.

echo "Name: John, Age: 30
Name: Jane, Age: 25" | awk '$1 ~ /Name/ {print $2}'

awk: извлечение совпадений (match, substr)

В awk есть функции вроде match(string, regex) для поиска позиции и длины совпадения и substr(string, start, length) для его извлечения.

После вызова match() в RSTART хранится начальная позиция, а в RLENGTH — длина совпадения.

echo "ItemCode: ABC123 Price: 45.67" | awk '{match($0, /[0-9]+\.[0-9]+/); print substr($0, RSTART, RLENGTH)}'

awk: замена на месте (sub, gsub)

В awk также есть встроенные функции для замены: sub(regex, replacement, target) заменяет первое совпадение, а gsub(regex, replacement, target) — все совпадения.

Если target не указан, используется $0 (вся запись). Можно указать такое поле, как $1.

echo "apple,banana,orange" | awk '{gsub(/a/, "X", $0); print}'

Выбор между sed и awk

И sed, и awk могут использовать регулярные выражения для замены и фильтрации, но особенно хорошо они подходят для разных задач:

  • sed обычно лучше подходит для простых построчных преобразований и замен. Это потоковый редактор.
  • awk мощнее при обработке структурированных данных (полей), выполнении вычислений и работе со сложной логикой или многострочными шаблонами. Это самостоятельный язык программирования.

Часто их можно объединять в цепочку с помощью каналов | для выполнения очень сложных задач.

Задание: извлечение и преобразование

Рассмотрим следующую строку текста:

Order#12345: ProductX - Price $19.99

Какая команда корректно извлечёт цену (например, '19.99'), а затем заменит символ валюты на 'EUR'?

Повторение: регулярные выражения в sed и awk

Вы освоили объединение регулярных выражений с sed и awk!

  • sed отлично подходит для построчной фильтрации и замены текста, используя регулярные выражения для мощного поиска по шаблонам и замены.
  • awk предоставляет более программный подход: с его помощью можно фильтровать записи регулярными выражениями, выполнять поиск в отдельных полях и извлекать или изменять данные с помощью таких функций, как match(), substr(), sub() и gsub().

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

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

Урок «Сочетание регулярных выражений с sed и awk» бесплатный?

Да — полный текст урока «Сочетание регулярных выражений с sed и awk» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Сочетание регулярных выражений с sed и awk»?

Встраивайте регулярные выражения в команды «sed» и «awk» для расширенной фильтрации, замены текста и извлечения данных. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Сочетание регулярных выражений с sed и awk»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Введение в регулярные выражения (Regex)
  2. Расширенный grep с регулярными выражениями
  3. Сочетание регулярных выражений с sed и awk
  4. Группы захвата, обратные ссылки и подстановка
← Назад к DevOps Bootcamp