Обзор
В этой статье рассматривается команда sed — мощный потоковый редактор, позволяющий быстро и точно заменять и редактировать содержимое текстовых файлов в среде Linux. На практических примерах мы разберем всё: от базовой замены строк до удаления определенных строк и редактирования файлов на месте с созданием резервной копии с помощью опции -i.
1. Подготовка среды и базовая замена строк в sed (команда s)
Чтобы безопасно практиковаться в работе с командой sed, создадим специальный каталог и перейдем в него с помощью команды mkdir -p ~/sed_practice && cd ~/sed_practice.

Для подготовки тестовых данных, используемых в примерах замены строк, выполним команду echo -e 'apple is delicious\nbanana is yellow\napple is red' > fruits.txt, чтобы записать содержимое в файл.

Команда sed — это потоковый редактор для обработки и модификации текстовых потоков.
Используя команду замены s, заменяем первое вхождение строки apple в каждой строке на orange и выводим результат на экран.
Содержимое исходного файла fruits.txt не изменяется — результат выводится только в стандартный вывод.
⚙️ [Основные опции]
-i : изменяет исходный файл напрямую на месте вместо вывода результата на экран.-e : позволяет объединять и выполнять несколько команд редактирования одновременно.-n : подавляет автоматический вывод пространства шаблонов и выводит только явно указанные строки.-E или -r : включает синтаксис расширенных регулярных выражений (ERE).

Добавление флага g в конец выражения замены выполняет глобальную (global) замену всех совпадений в каждой строке.
Это полезно, когда в одной строке встречается несколько одинаковых шаблонов поиска и их нужно заменить все без исключения.

2. Выборочный вывод и удаление строк (команда d и опция -n)
Для подготовки данных логов, необходимых для практического занятия по выбору и удалению строк, создадим пример файла с помощью команды echo -e 'Line 1: Server OK\nLine 2: Server Warning\nLine 3: Server Error\nLine 4: Server OK' > server.log.

Комбинация опции -n и команды p позволяет вывести на экран только указанный диапазон строк — со 2-й по 3-ю.
Это удобно, когда нужно подавить стандартный автоматический вывод и просмотреть только интересующие строки.

С помощью команды d и сопоставления по шаблону исключаются строки, содержащие строку Warning, а на экран выводятся только остальные строки.
Этот способ применяется для фильтрации ненужных логов или строк, соответствующих определенному условию.

Указав конкретный номер строки и выполнив команду d, мы удаляем 2-ю строку и выводим результат на экран.
Это используется, когда необходимо удалить строку с определенным номером и просмотреть содержимое файла.

3. Прямое редактирование исходного файла и автоматическое резервное копирование (опция -i)
Для практического занятия по редактированию конфигурационных файлов создадим файл config.env, содержащий примеры переменных окружения.

С помощью опции -i.bak создается резервная копия исходного файла config.env.bak и одновременно с этим параметр DEBUG=true заменяется на DEBUG=false с сохранением изменений прямо в исходном файле.
Это позволяет безопасно сохранить исходное состояние перед внесением изменений в оригинальный файл.

Проверим содержимое измененного файла config.env с помощью команды cat.
Видно, что значение DEBUG успешно изменено на false и сохранено в файле.

Выведем содержимое автоматически созданного файла резервной копии config.env.bak.
Исходное состояние до модификации (DEBUG=true) сохранилось без изменений, что подтверждает успешное создание резервной копии.

4. Продвинутая замена текста с использованием регулярных выражений и альтернативных разделителей
Для подготовки примера данных с путями к файлам запишем содержимое в файл paths.txt с помощью команды echo.

Используя символ вертикальной черты (|) в качестве разделителя замены вместо стандартного слэша (/), безопасно заменим путь /usr/local/bin на /usr/bin и выведем результат.
При работе с путями к файлам или URL-адресами, содержащими слэши, это позволяет писать выражения аккуратно, без использования экранирующих символов (\).

Чтобы попрактиковаться в удалении пробелов с помощью регулярных выражений, создадим тестовый файл spaces.txt, содержащий начальные и конечные пробелы.

Используя символ начала строки ^ в сочетании с регулярным выражением [ \t]*, задающим пробелы и символы табуляции, удаляем все начальные пробелы в каждой строке и выводим результат.
Это полезно для быстрой пакетной очистки отступов в документах или лог-файлах.
![sed ’s/^[ \t]*//’ spaces.txt](/ubuntu/20261008_013946_6/captures/s04_c04_sed__s_____t______spaces_txt.png)
В этом руководстве мы рассмотрели ключевые аспекты работы с командой sed в Linux: от базовой замены текста до пакетной модификации файлов.
Это мощный инструмент, который существенно сокращает рутинную работу по редактированию файлов, поэтому обязательно используйте его в своих повседневных задачах.