Цель урока: Освоить базовые, но самые важные возможности потокового редактора sed (Stream Editor). Мы научимся выполнять операцию "найти и заменить" в файлах и текстовых потоках, не открывая их в интерактивном редакторе. Это фундаментальный навык для автоматизации редактирования конфигурационных файлов, обработки данных и подготовки отчетов.
Часть 1: Теория. Что такое sed и в чем его суперсила?
Представьте, что grep - это ваш детектив. Он тщательно изучает текст и находит нужные вам строки, но ничего в них не меняет.
sed - это ваш редактор-робот. Он так же читает текст строка за строкой, но его главная задача - не просто найти, а внести изменения в найденные строки и передать измененный текст дальше.
Ключевая концепция: sed работает как поток. Он не изменяет оригинальный файл (если не попросить его об этом специально). Он читает строку, применяет к ней ваши инструкции, выводит измененную строку на экран (в stdout), берет следующую строку и так далее. Это делает его невероятно мощным и безопасным инструментом: вы всегда можете сначала посмотреть на результат его работы на экране и только потом, убедившись, что все правильно, сохранить изменения в файл.
Где это используется постоянно?
-
Автоматическое изменение конфигов: Вам нужно в скрипте изменить параметр port = 8080 на port = 9000 в конфигурационном файле. sed сделает это одной командой.
-
Очистка данных: Убрать из лог-файла лишние пробелы, заменить ERROR на [CRITICAL] или удалить метки времени.
-
Массовое переименование: В связке с другими командами sed может изменять части имен файлов.
Часть 2: Практика. Основная команда sed - замена (s)
Самая частая (95% случаев) операция в sed - это замена.
Базовый синтаксис:
sed 's/ШАБЛОН/ЗАМЕНА/ФЛАГИ' /путь/к/файлу
-
sed: Имя команды.
-
'...': Одинарные кавычки. Внутри них мы пишем нашу инструкцию для sed.
-
s: Команда "substitute" (заменить).
-
/: Разделитель. Классический разделитель - слэш /, но можно использовать почти любой другой символ (@, #, |), что очень удобно, когда вы работаете с путями к файлам (где много слэшей).
-
ШАБЛОН: Что мы ищем. Это может быть простое слово или регулярное выражение (те же, что мы начали изучать с grep).
-
ЗАМЕНА: На что мы меняем найденный шаблон.
-
ФЛАГИ: Необязательные модификаторы, которые управляют поведением замены.
-
/путь/к/файлу: Входной файл. Если его нет, sed читает из стандартного ввода (после |).
Подготовка к экспериментам:
Давайте создадим тестовый файл, на котором будем практиковаться.
cd ~/scripts
# Используем cat с перенаправлением для создания файла с текстом
cat > sed_test.txt << EOL
Hello world. This is a test file.
The word test appears twice in this test line.
Another line without the keyword.
This is a Test, with a capital letter.
Теперь у нас есть файл sed_test.txt для экспериментов.
Пример 1: Простая замена (первое вхождение)
Заменим слово test на example.
sed 's/test/example/' sed_test.txt
Результат на экране:
Hello world. This is a example file.
The word example appears twice in this test line.
Another line without the keyword.
This is a Test, with a capital letter.

Что мы видим:
-
Оригинальный файл sed_test.txt не изменился! (Проверьте командой cat sed_test.txt). sed лишь вывел результат на экран.
-
Во второй строке sed заменил только первое слово test. По умолчанию, он останавливается после первого совпадения в строке.
Пример 2: Глобальная замена (флаг g)
Теперь заменим все вхождения test в каждой строке.
-
Флаг g (global): Говорит sed не останавливаться после первого совпадения, а продолжать поиск до конца строки.
sed 's/test/example/g' sed_test.txt
Результат на экране:
Hello world. This is a example file.
The word example appears twice in this example line.
Another line without the keyword.
This is a Test, with a capital letter.

Теперь оба слова test во второй строке заменены.
Пример 3: Замена без учета регистра (флаг i)
Заменим и test, и Test.
-
Флаг i (insensitive): Делает поиск нечувствительным к регистру.
sed 's/test/example/gi' sed_test.txt
Результат на экране:
Hello world. This is a example file.
The word example appears twice in this example line.
Another line without the keyword.
This is a example, with a capital letter.

Теперь замена произошла и в последней строке.
Часть 3: Практика. Сохранение изменений в файл (-i)
Когда вы посмотрели на вывод и уверены, что sed делает то, что нужно, можно применить изменения к файлу.
ОПЦИЯ -i (in-place): Эта опция говорит sed редактировать файл "на месте", то есть перезаписать его измененной версией.
ВНИМАНИЕ: Эта операция необратима. Хорошей практикой является сначала создать резервную копию. Опция -i может сама создать бэкап, если указать расширение.
-
-i.bak: Сначала создаст копию файл.bak, а потом изменит оригинальный файл. Это самый безопасный способ.
-
-i: Просто изменит файл без создания копии. Используйте с осторожностью!
Пример: Давайте наконец-то сохраним наши изменения, предварительно создав бэкап.
sed -i.bak 's/test/example/gi' sed_test.txt
-
Новый файл sed_test.txt.bak - это ваша страховка, он содержит оригинальный текст.
-
Файл sed_test.txt теперь содержит измененный текст.
Часть 4: Продвинутые примеры и заключение
1. Использование sed в конвейерах (|)
sed прекрасно работает с данными, "прилетающими" от других команд.
# Посмотреть IP-адреса, но убрать кавычки, которые может добавлять какая-нибудь утилита
# some_command | sed 's/"//g'
2. Использование других разделителей
Это критически важно при работе с путями. Представьте, что нам нужно заменить /usr/local/bin на /opt/bin.
# Ужасный, нечитаемый вариант со слэшами:
sed 's/\/usr\/local\/bin/\/opt\/bin/g' some_config.conf
# Прекрасный, читаемый вариант с другим разделителем (@):
sed 's@/usr/local/bin@/opt/bin@g' some_config.conf
Результат будет абсолютно одинаковым, но второй вариант гораздо проще для восприятия.
3. Применение команды только к определенным строкам
Вы можете указать sed адрес - номер строки или шаблон, к которому нужно применить команду.
# Заменить 'test' на 'example' только во второй строке
sed '2s/test/example/g' sed_test.txt
# Заменить 'test' на 'example' только в строках, где есть слово 'twice'
sed '/twice/s/test/example/g' sed_test.txt
Заключение:
Мы освоили самую главную и самую используемую функцию sed - поиск и замену. Вы научились безопасно применять изменения, работать с потоками данных и использовать хитрости для улучшения читаемости. Даже этих знаний уже достаточно для автоматизации огромного пласта задач по редактированию конфигурационных файлов. sed умеет делать и многие другие вещи (удалять строки, вставлять текст), но именно операция s/ является его визитной карточкой.
На следующем, 19-м уроке, мы познакомимся с последним гигантом обработки текста - awk. Если grep ищет строки, а sed их изменяет, то awk - это инструмент для анализа структурированных данных. Он "видит" текст не как набор строк, а как таблицу со столбцами, и позволяет производить вычисления, форматировать вывод и создавать сложные отчеты прямо в командной строке.
Перейти к просмотру - УРОК №19.
Промо-код: PROMO15 - скидка 15%!
Введите при оформлении первого заказа на сайте: Hosting-VDS.com