Сочетание регулярных выражений с 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 — локальная установка не требуется.
Все уроки этого курса
- Введение в регулярные выражения (Regex)
- Расширенный grep с регулярными выражениями
- Сочетание регулярных выражений с sed и awk
- Группы захвата, обратные ссылки и подстановка