Топ-20 самых полезных флагов sed#

Флаг Назначение
-n Подавить автоматический вывод (используется с p)
-i Редактировать файлы на месте
-i.bak Редактировать файлы, создавая бэкап
-e Передать несколько скриптов sed
-E Включить расширенные регулярные выражения
-r То же самое, что -E (старый стиль)
-f script.sed Выполнить команды из файла
-u Выводить результат построчно (стриминг)
-s Обрабатывать файлы последовательно, а не параллельно
--sandbox Безопасный режим, запрещает e и r
s/// Замена текста
p Печать строки
d Удаление строки
i Вставка строки
a Добавление строки
c Замена блока строк
r Вставка содержимого из другого файла
= Печать номера строки
q Завершить обработку досрочно
:label Метка для циклов и условий

Уровень 1 — Базовые команды (разогрев)#

sed 's/foo/bar/' file.txt

  • Заменяет первое вхождение foo на bar в каждой строке

sed 's/foo/bar/g' file.txt

  • Заменяет все вхождения foo на bar

sed -n '5p' file.txt

  • Печатает только 5-ю строку

sed -n '1,10p' file.txt

  • Печатает строки с 1-й по 10-ю

sed '10d' file.txt

  • Удаляет 10-ю строку

sed '5,15d' file.txt

  • Удаляет строки с 5-й по 15-ю

sed '=' file.txt

  • Печатает номера строк вместе с содержимым

Уровень 2 — Замена текста#

sed 's/error/ERROR/' file.txt

  • Заменяет error на ERROR

sed 's/[0-9]/#/g' file.txt

  • Заменяет все цифры на #

sed 's/foo/bar/2' file.txt

  • Заменяет второе вхождение foo

sed 's/foo/bar/I' file.txt

  • Замена foobar без учёта регистра

sed 's:foo:bar:g' file.txt

  • Использует : вместо / как разделитель

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

  • Редактирует файл на месте

sed -i.bak 's/old/new/g' file.txt

  • Делает замену и создаёт резервную копию

Уровень 3 — Вставка и удаление строк#

sed '3i Hello' file.txt

  • Вставить Hello перед 3-й строкой

sed '3a World' file.txt

  • Вставить World после 3-й строки

sed '2r extra.txt' file.txt

  • Вставить содержимое extra.txt после 2-й строки

sed '5,10c NEW CONTENT' file.txt

  • Заменить строки с 5-й по 10-ю на NEW CONTENT

sed '/^$/d' file.txt

  • Удалить пустые строки

sed '/^#/d' file.txt

  • Удалить строки-комментарии

sed '/pattern/d' file.txt

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

Уровень 4 — Фильтрация по шаблонам#

sed -n '/error/p' file.txt

  • Показать только строки с error

sed -n '/error/!p' file.txt

  • Показать строки, не содержащие error

sed '/^[A-Z]/!d' file.txt

  • Оставить только строки, начинающиеся с заглавной буквы

sed '/[0-9]$/!d' file.txt

  • Оставить только строки, заканчивающиеся на цифру

sed '/foo.*bar/p' file.txt

  • Найти строки, где есть foo и после него bar

sed -n '/^\s*$/!p' file.txt

  • Убрать пустые строки и строки, состоящие только из пробелов

Уровень 5 — Группировка и подстановки#

sed -E 's/(foo)/[\1]/g' file.txt

  • Оборачивает слово foo в квадратные скобки

sed -E 's/(.*)foo(.*)/\2bar\1/' file.txt

  • Меняет местами части строки

sed -E 's/([0-9]+)/[&]/g' file.txt

  • Оборачивает найденные числа в []

sed -E 's/([A-Z]+)/\L\1/g' file.txt

  • Переводит все заглавные буквы в нижний регистр

sed -E 's/([a-z]+)/\U\1/g' file.txt

  • Переводит все строчные буквы в верхний регистр

sed -E 's/\bcat\b/dog/g' file.txt

  • Заменяет слово cat на dog, не затрагивая подстроки

sed -E 's/([0-9]{3})-([0-9]{2})/\2-\1/' file.txt

  • Меняет порядок чисел по группам

Уровень 6 — Мощные комбинации#

find . -type f -name "*.txt" | xargs sed -i 's/foo/bar/g'

  • Рекурсивно заменяет foobar во всех .txt файлах

grep -rl "DEBUG" logs/ | xargs sed -i 's/DEBUG/INFO/g'

  • Массовая замена DEBUGINFO только в найденных файлах

sed '10,20s/foo/bar/g' file.txt

  • Замена foobar только в строках 10–20

cat file.txt | sed 's/[[:space:]]\+/ /g'

  • Сжимает все пробелы и табы в один пробел

ps aux | sed 's/\s\+/,/g'

  • Форматирует вывод процессов в CSV

ls | sed 's/^/Файл: /'

  • Добавляет префикс Файл: перед именем файла

dmesg | sed -n 's/.*error: \(.*\)/\1/p'

  • Извлекает текст ошибок из системного лога

sed 's/\t/,/g' data.tsv

  • Заменяет табуляцию на запятые (TSV → CSV)

sed '/^#/d;/^$/d' config.conf

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

awk '{print $1}' access.log | sed 's/^/IP: /'

  • Добавляет префикс IP: ко всем IP-адресам

sed ':a;N;$!ba;s/\n/, /g' file.txt

  • Объединяет все строки файла в одну через запятую

sed '/ERROR\|WARNING/d' app.log

  • Удаляет строки с ERROR или WARNING

grep -rl "version: 1.0" . | xargs sed -i 's/version: 1.0/version: 2.0/g'

  • Массовое обновление версий

Уровень 7 — Гуру-режим#

sed '1!G;h;$!d' file.txt

  • Переворачивает строки в файле (реверс)

sed 's/.*\///' file.txt

  • Оставляет только имена файлов из путей

sed 's/\(.*\)/[\1]/' file.txt

  • Оборачивает каждую строку в квадратные скобки

sed '1,3!d' file.txt

  • Оставляет только первые 3 строки

sed '4,$d' file.txt

  • Удаляет всё, начиная с 4-й строки

sed -E ':a;N;$!ba;s/\n/, /g' file.txt

  • Соединяет все строки файла в одну через запятую

sed '/^$/d;/^#/d' file.txt

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

sed -n '/ERROR/{n;p}' file.txt

  • Показывает строки после строк с ERROR

sed -n '/foo/{=;p}' file.txt

  • Печатает номер и содержимое строки с foo

Бонус: мультифайловая массовая замена#

find . -type f -name “*.conf” -exec sed -i ’s/DEBUG/INFO/g’ {} ; 🔹 Найдёт все .conf файлы и заменит DEBUG на INFO.