Содержание

Sed

💡 Минимальный набор (must know)

Команда Назначение
sed 's/a/b/g' Замена
sed '/pattern/d' Удаление по шаблону
sed -n '/p/p' Фильтрация
sed -i '…' file Изменение файла
sed -E '…' Расширенные regex

📌 Основные ключи sed

Ключ Описание
-n Не выводить строки по умолчанию (только через p)
-e Добавить команду sed (можно несколько)
-f Читать команды из файла
-i Редактировать файл "на месте"
-r / -E Использовать расширенные регулярные выражения
-l Ограничение длины строки вывода
-z Разделитель NULL вместо \\n
–debug Режим отладки (GNU sed)

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

Команда Пример Описание
s sed 's/a/b/' Замена первого совпадения
s (g) sed 's/a/b/g' Замена всех совпадений
d sed 'd' Удалить строки
d (адрес) sed '5d' Удалить строку №5
d (шаблон) sed '/error/d' Удалить строки по шаблону
p sed -n 'p' Печать строк
p (адрес) sed -n '5p' Печать строки №5
p (шаблон) sed -n '/error/p' Печать по шаблону
i sed '1i TEXT' Вставить перед строкой
a sed '1a TEXT' Добавить после строки
c sed '1c TEXT' Заменить строку целиком

📍 Адресация

Синтаксис Пример Описание
N sed '5d' Конкретная строка
N,M sed '1,5d' Диапазон строк
/pattern/ sed '/error/d' По шаблону
/start/,/end/ sed '/a/,/b/d' Диапазон по шаблонам

⚙️ Флаги команды s///

Флаг Пример Описание
g s/a/b/g Все совпадения
i s/a/b/i Без учёта регистра
p s/a/b/p Печатать изменённые строки
w file s/a/b/w out.txt Записать результат в файл

🔥 Практические примеры

Задача Команда
Замена текста sed -i 's/localhost/127.0.0.1/g' file.txt
Удалить пустые строки sed '/$/d' file.txt
Удалить комментарии sed '/#/d' file.txt
Оставить только совпадения sed -n '/ERROR/p' log.txt
Замена по regex sed -E 's/[0-9]+/NUMBER/g'

⚠️ Важные нюансы

Ситуация Пример Комментарий
Безопасный inplace sed -i.bak 's/a/b/' file Создаёт backup
Альтернативный разделитель sed 's|/var/log|/tmp/log|g' Удобно для путей
Работа с пробелами sed 's/ /_/g' Замена пробелов

Вырезаем ip адреса

cat  from.txt | sed -r "s/(.*)from.([[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+)(.*)/\2/"

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

sed '/^$/d' test.txt
sed -e '/^-/!d' -e '/^[[:space:]]*$/d' 1.txt > 2.txt

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

sed '/^\s*$/d;/^\s*#/d' file
 
sed -E '/^[[:space:]]*$/d;/^[[:space:]]*#/d' file
 
sed -E '/^[[:space:]]*($|#)/d' file