Расширенная обработка текста (sed, awk)
Изучите «sed» для потокового редактирования и «awk» для мощной обработки текста, поиска по шаблонам и извлечения данных.
«Расширенная обработка текста (sed, awk)» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Редактирование потоков с помощью sed
sed, сокращение от «потоковый редактор», — мощная консольная утилита для разбора и преобразования текста. Она обрабатывает текстовые потоки построчно. Её можно представить как неинтерактивный текстовый редактор.
sed читает строку, применяет команду (например, замену или удаление), выводит результат, а затем переходит к следующей строке. Благодаря этому утилита очень эффективна при работе с большими файлами или данными, переданными по каналу.
Простая замена текста
Наиболее распространённое применение sed — замена текста. Мы используем команду s, за которой следует разделитель (часто /), искомый шаблон, ещё один разделитель, текст замены и последний разделитель.
Синтаксис: sed 's/pattern/replacement/' filename
Попробуйте заменить «apple» на «orange» в тестовом файле:
#!/bin/bash
# Create a sample file
echo "I like red apple." > fruits.txt
echo "My favorite fruit is apple." >> fruits.txt
echo "Another apple here." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command:"
sed 's/apple/orange/' fruits.txt
# Clean up
rm fruits.txtГлобальный поиск без учёта регистра
По умолчанию sed заменяет только первое вхождение шаблона в каждой строке. Чтобы заменить все вхождения в строке, используйте флаг g (глобальный).
Для поиска без учёта регистра используйте флаг i. Флаги можно комбинировать, например gi.
Пример: заменить все варианты слова «apple» без учёта регистра на «banana».
#!/bin/bash
# Create a sample file
echo "Apple is good." > fruits.txt
echo "I eat an apple and another Apple." >> fruits.txt
echo "Apples are tasty." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command (s/apple/banana/gi):"
sed 's/apple/banana/gi' fruits.txt
# Clean up
rm fruits.txtУдаление строк с помощью sed
С помощью sed также можно удалять целые строки, соответствующие определённому шаблону. Для этого используется команда d.
Синтаксис: sed '/pattern/d' filename
Это удобно для удаления ненужных строк, например записей журнала, содержащих «DEBUG», или пустых строк.
Давайте удалим строки, содержащие «error»:
#!/bin/bash
# Create a sample file
echo "INFO: User logged in." > log.txt
echo "WARNING: Disk space low." >> log.txt
echo "ERROR: File not found." >> log.txt
echo "INFO: Operation complete." >> log.txt
echo "ERROR: Permission denied." >> log.txt
echo "Original content:"
cat log.txt
echo ""
echo "---"
echo "Running sed command (/error/d):"
sed '/error/d' log.txt
# Clean up
rm log.txtawk: язык поиска по шаблонам
awk — ещё один мощный инструмент обработки текста, который часто используется для извлечения данных и создания отчётов. Если sed — это потоковый редактор, то awk больше похож на язык программирования, предназначенный для работы с текстом.
awk обрабатывает текстовые файлы построчно, как и sed. Однако он рассматривает каждую строку как «запись» и разделяет записи на «поля» (столбцы) с помощью разделителя.
По умолчанию awk использует пробельные символы (пробелы и табуляции) в качестве разделителя полей.
Доступ к полям данных
В awk поля обозначаются как $1, $2, $3 и так далее. $0 представляет всю строку целиком.
Вы можете выводить определённые поля с помощью команды print внутри фигурных скобок {}. Синтаксис: awk '{ print $FIELD_NUMBER }' filename
Давайте выведем первое и третье поля из простого файла с данными:
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (print $1, $3):"
awk '{print $1, $3}' data.txt
# Clean up
rm data.txtФильтрация строк с помощью awk
Как и sed, awk может фильтровать строки по шаблонам. Укажите шаблон перед блоком действий. Действие будет выполнено только для строк, соответствующих шаблону.
Синтаксис: awk '/pattern/ { action }' filename
Давайте найдём и выведем только имена людей из «Лондона»:
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "David 28 London" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (/London/ {print $1}):"
awk '/London/ {print $1}' data.txt
# Clean up
rm data.txtИнициализация и завершение с помощью awk
В awk можно задавать действия, выполняемые до обработки любых строк (блок BEGIN) и после обработки всех строк (блок END).
Блоки BEGIN отлично подходят для вывода заголовков или инициализации переменных. Блоки END идеально подходят для вывода сводок, итоговых значений или нижних колонтитулов.
Давайте добавим заголовок и нижний колонтитул к нашим выходным данным:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (BEGIN/END):"
awk 'BEGIN { print "--- User Data ---" } { print $1, $2 } END { print "--- End Report ---" }' data.txt
# Clean up
rm data.txtУсловная логика в awk
В блоках действий awk можно использовать операторы if, чтобы применять логику на основе значений полей или других условий. Это делает awk очень мощным инструментом для сложной фильтрации и преобразования данных.
Синтаксис: awk '{ if (condition) { action } }' filename
Давайте выведем только пользователей старше 25 лет:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Diana 27 Berlin" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (if $2 > 25):"
awk '{ if ($2 > 25) { print $1, $2 } }' data.txt
# Clean up
rm data.txtБыстрая проверка: sed и awk
Рассмотрим следующие данные в файле с именем names.txt:
John Doe,30,New York
Jane Smith,25,London
Peter Jones,40,Paris
Какая из следующих команд выведет только имена (первое поле) людей старше 30 лет?
Итоги: возможности sed и awk
Теперь вы изучили возможности sed для потокового редактирования и awk для расширенной обработки текста!
sedидеально подходит для простых замен, удалений и преобразований строка за строкой.awkотлично справляется с разбором структурированного текста, работой с полями и применением условной логики для извлечения данных и создания отчётов.
Эти инструменты незаменимы для написания сценариев, анализа журналов и обработки данных в среде 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 структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Расширенная обработка текста (sed, awk)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Расширенная обработка текста (sed, awk)
- Архивирование и сжатие (tar, gzip, unzip)
- Использование диска и сведения о системе (df, du, uname)
- Сортировка и удаление дубликатов в данных (sort, uniq, cut)