Утилита 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
Выполним несколько операций:
-
Заменим
banana
наgrape
:bash sed 's/banana/grape/' fruits.txt
-
Удалим строку с
cherry
:bash sed '/cherry/d' fruits.txt
-
Добавим строку после второй:
bash sed '2a\mango' fruits.txt
Полезные советы
- Тестировать команды
sed
лучше заранее, используя вывод в терминал или сохраняя результат в другой файл. - Используйте
-i
с осторожностью — это изменяет исходный файл. - Для сложных сценариев можно создавать отдельный файл с командами
sed
.
Пример файла команд (script.sed
):
s/old/new/g
/DELETE/d
Выполнить его:
sed -f script.sed файл.txt