Skip to content

Утилита sed

Описание

sed (от англ. stream editor) — это мощный инструмент для манипуляции текстом в потоке. Он может выполнять: - Поиск и замену - Вставку, удаление и изменение строк - Обработку файлов без интерактивного редактирования

Он особенно полезен при автоматизации задач, таких как массовая замена в файлах конфигурации, обработка логов или преобразование форматов данных.


Синтаксис

sed [опции] 'команда' файл(ы)

или

команда | sed [опции] 'команда'

Примеры использования

1. Просмотр содержимого файла

sed '' файл.txt

Выведет всё содержимое файла (без изменений).

2. Замена текста

sed 's/старый/новый/' файл.txt

Заменит первое вхождение "старый" на "новый" в каждой строке.

Для замены всех вхождений добавь флаг g:

sed 's/старый/новый/g' файл.txt

3. Удаление строк

sed '5d' файл.txt

Удалит 5-ю строку.

sed '/pattern/d' файл.txt

Удалит все строки, содержащие "pattern".

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

sed '3i\Это вставленная строка' файл.txt

Вставит новую строку перед 3-й строкой.

sed '3a\Это добавленная строка' файл.txt

Добавит строку после 3-й строки.

5. Изменение целой строки

sed '5c\Это новая пятая строка' файл.txt

Заменит 5-ю строку на указанную.

6. Работа с диапазонами строк

sed '10,20d' файл.txt

Удалит строки с 10-й по 20-ю.

sed '1,5s/foo/bar/g' файл.txt

Заменит "foo" на "bar" только в первых пяти строках.


Основные команды sed

Команда Описание
s/pattern/replacement/flags Замена текста
d Удалить строку
p Вывести строку (часто используется с -n)
i\текст Вставить текст перед строкой
a\текст Добавить текст после строки
c\текст Заменить строку на указанный текст
q Выход из sed после обработки
= Показать номер строки

Полезные опции

Опция Описание
-n Подавляет вывод всех строк, кроме тех, что явно заданы командой p
-e Позволяет использовать несколько выражений
-f файл Читает команды из файла
-i Редактирует файл на месте (без создания копии)
-r Включает поддержку расширенных регулярных выражений

Работа с файлами

1. Сохранить изменения в новый файл

sed 's/старый/новый/g' файл.txt > новый_файл.txt

2. Редактировать файл на месте

sed -i 's/старый/новый/g' файл.txt

⚠️ Будьте осторожны! Эта команда перезапишет исходный файл.

3. Создать резервную копию при редактировании

sed -i.bak 's/старый/новый/g' файл.txt

Создаст резервную копию файл.txt.bak, а затем изменит оригинальный файл.


Использование регулярных выражений

sed полностью поддерживает регулярные выражения:

Примеры:

sed 's/^/# /' файл.txt

Добавит символ # в начало каждой строки.

sed '/^$/d' файл.txt

Удалит все пустые строки.

sed -r 's/[0-9]+/NUMBER/g' файл.txt

Заменит все числа на слово NUMBER.


Альтернативы

Инструмент Когда использовать
awk Если нужно работать с колонками, числами, сложными условиями
perl / python Для более сложной обработки текста
grep Если нужен только поиск
replace Простая замена в MySQL (не Unix-инструмент)
bat / ripgrep Современные альтернативы с цветовой подсветкой и скоростью

Пример работы

Создадим тестовый файл:

echo -e "apple\nbanana\ncherry" > fruits.txt

Выполним несколько операций:

  1. Заменим banana на grape: bash sed 's/banana/grape/' fruits.txt

  2. Удалим строку с cherry: bash sed '/cherry/d' fruits.txt

  3. Добавим строку после второй: bash sed '2a\mango' fruits.txt


Полезные советы

  • Тестировать команды sed лучше заранее, используя вывод в терминал или сохраняя результат в другой файл.
  • Используйте -i с осторожностью — это изменяет исходный файл.
  • Для сложных сценариев можно создавать отдельный файл с командами sed.

Пример файла команд (script.sed):

s/old/new/g
/DELETE/d

Выполнить его:

sed -f script.sed файл.txt