JavaRush /Курсы /Docker SELF /Преобразование текста с помощью sed

Преобразование текста с помощью sed

Docker SELF
8 уровень , 1 лекция
Открыта

1. Синтаксис команды sed

Что такое sed?

sed (аббревиатура от Stream Editor, то есть потоковый редактор) — это мощная утилита для обработки текста, которая позволяет изменять, добавлять, удалять или трансформировать строки в текстовых файлах и потоках данных.

Главная магия sed заключается в том, что он редактирует текст "на лету", не затрагивая оригинальный файл (если вы сами об этом не попросите). Это делает его идеальным инструментом для быстрого и автоматического преобразования данных.

Основной синтаксис команды

Возьмём основную формулу для работы с sed:

sed [опции] 'шаблон/действие' файл

Где:

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

Для простоты на первых порах мы сосредоточимся на самых популярных действиях: замене текста (s — от слова "substitute") и удалении строк (d — от слова "delete").


2. Замена текста s/старое/новое/

Пример 1: Элементарная замена текста

Допустим, у нас есть файл example.txt с содержимым:

Hello world!
Welcome to Linux.
Linux is awesome.

Попробуем заменить слово "Linux" на sed:

sed 's/Linux/sed/' example.txt

Вывод будет следующим:

Hello world!
Welcome to sed.
sed is awesome.

Вот и всё. Слово "Linux" было заменено на sed только один раз в каждой строке. Это стандартное поведение.


Пример 2: Глобальная замена

Если нужно заменить все вхождения слова вместо первого в строке, добавьте флаг g (глобально):

sed 's/Linux/sed/g' example.txt

Если в строке несколько упоминаний "Linux", то они все будут заменены на sed.


Пример 3: Игнорирование регистра

Для замены текста без учёта регистра добавьте флаг I (или i в зависимости от вашей версии):

sed 's/linux/sed/gi' example.txt

Это заменит слова "Linux", "LINUX", "LiNuX" и т.д.


Пример 4: Замена с сохранением результата

По умолчанию sed просто выводит результат в консоль, не изменяя файл. Если вы хотите записать изменения обратно в файл, добавьте опцию -i (in-place):

sed -i 's/Linux/sed/g' example.txt

Теперь файл example.txt будет обновлён с заменами.


3. Удаление строк /шаблон/d

Пример 1: Удаление строк по шаблону

Если вы хотите удалить все строки, содержащие слово "Linux":

sed '/Linux/d' example.txt

Вывод будет таким:

Hello world!

Здесь удалены строки, где фигурирует "Linux".


Удаление строк по номеру

Можно удалить строку по её номеру. Например, чтобы удалить вторую строку, используем:

sed '2d' example.txt

Вывод:

Hello world!
Linux is awesome.

Удаление нескольких строк: укажите диапазон, например, удалить строки с 2-й по 3-ю:

sed '2,3d' example.txt

4. Работа с регулярными выражениями

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

Пример 1: Замена слов с определённым шаблоном

Допустим, в тексте есть строки:

error: something went wrong
warning: check your system
error: unable to connect

Мы хотим заменить все строки, начинающиеся с "error", на "Issue Detected". В этом помогут регулярные выражения:

sed 's/^error:.*/Issue Detected/' logs.txt

Где:

  • ^ — указывает на начало строки.
  • .* — означает "всё, что угодно после".

Результат:

Issue Detected
warning: check your system
Issue Detected

5. Вставка и добавление строк

Вставка строки перед совпадением

Чтобы вставить строку перед каждой строкой, содержащей "Linux":

sed '/Linux/i\# Learning is fun' example.txt

Результат:

Hello world!
Welcome to Linux.
# Learning is fun
Linux is awesome.

Пример 2: Добавление строки после совпадения

Для добавления текста после строки с шаблоном:

sed '/Linux/a\# sed makes it easier' example.txt

Результат:

Hello world!
Welcome to Linux.
# sed makes it easier
Linux is awesome.
# sed makes it easier

6. Практика: обработка конфигурационных файлов

Попробуем решить практическую задачу. Представьте, что у вас есть конфигурационный файл config.txt:

host=localhost
port=8080
mode=production
logfile=/var/log/app.log

Задача 1: Заменить "localhost" на "127.0.0.1"

sed -i 's/localhost/127.0.0.1/' config.txt

Результат:

host=127.0.0.1
port=8080
mode=production
logfile=/var/log/app.log

Задача 2: Увеличить порт на 1

Для этого используем sed с небольшим трюком:

sed -i 's/port=8080/port=8081/' config.txt

Результат:

host=127.0.0.1
port=8081
mode=production
logfile=/var/log/app.log

Задача 3: Удалить строки с logfile

Если конфигурация больше не требует ведения логов, удалим строку:

sed -i '/logfile/d' config.txt

Результат:

host=127.0.0.1
port=8081
mode=production

7. Комбинация с другими командами

sed отлично работает в связке с другими инструментами Linux. Например:

grep "error" logs.txt | sed 's/error/ERROR/'

Здесь мы сначала ищем строки с ошибками, а затем форматируем их.

Типичные ошибки и как их избегать

  • Ошибка: забыли опцию -i. Новички часто ждут, что sed изменит файл, но не добавляют -i. Не забудьте явно указать это, если вы хотите внести изменения в файл.
  • Ошибка: кавычки. В некоторых системах, особенно если используются одиночные кавычки, \ перед спецсимволами может работать некорректно. Всегда правильно экранируйте символы.
  • Ошибка с диапазонами строк. Если вы используете диапазоны (например, 2,3d), убедитесь, что они указаны корректно — файл не должен быть пустым.
1
Задача
Docker SELF, 8 уровень, 1 лекция
Недоступна
Простая замена текста в файле
Простая замена текста в файле
1
Задача
Docker SELF, 8 уровень, 1 лекция
Недоступна
Удаление строк в файле
Удаление строк в файле
1
Задача
Docker SELF, 8 уровень, 1 лекция
Недоступна
Изменение конфигурации файла
Изменение конфигурации файла
1
Задача
Docker SELF, 8 уровень, 1 лекция
Недоступна
Применение регулярных выражений для замены
Применение регулярных выражений для замены
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 9
1 октября 2025
5. Вставка и добавление строк Вставка строки перед совпадением

Hello world!
Welcome to Linux.
# Learning is fun
Linux is awesome.
Это неверный пример вывода. Будет дважды вставка (перед второй строкой тоже) --- Последняя задача требует создание файла, который уже существует вообще-то.
Иван Румянцев Уровень 23
13 марта 2025
где хоть слово в задаче про создание или сохранение в updated_logs.txt ?просто тупо сами написали решение в пункте 2