Гид по технологиям

sed — потоковый редактор для массовых текстовых преобразований в командной строке

7 min read Linux CLI Обновлено 12 Dec 2025
sed — потоковый редактор для командной строки
sed — потоковый редактор для командной строки

Иллюстрация использования sed в терминале

Что такое sed и когда он пригодится

sed (stream editor) — это консольная утилита, которая считывает поток текста (строку, вывод команды или файл), последовательно применяет правила поиска/замены/вставки/удаления и выводит результат. Ключевые сценарии применения:

  • Быстрая замена текста в выводе команд (например, ls | sed …).
  • Массовая правка файлов (с опцией -i для редактирования на месте).
  • Встраивание в скрипты для автоматической обработки логов, конфигов и данных.

Определение: Регулярное выражение — компактный способ описать шаблон текста для поиска и захвата.

Important: перед массовой операцией всегда проверяйте команду без -i и делайте резервную копию файлов.

Быстрые проверки установки

Чтобы узнать, установлен ли sed, выполните:

sed --version

Вывод версии sed в терминале

Если sed отсутствует, установите его в зависимости от дистрибутива:

  • Ubuntu/Debian: sudo apt install sed
  • RedHat/CentOS/Fedora: sudo yum install sed (или dnf на новых версиях)

Примечание: на macOS по умолчанию установлен BSD sed, с немного отличающейся реализацией опции -i. Про совместимость — ниже.

Основной пример: поиск и замена в строке

Самая простая команда замены имеет вид:

echo 'Hello Cloud Savvy IT fans!' | sed 's/Cloud Savvy IT/cloudsavvyit.com/'

Где:

  • s — команда замены (substitute).
  • Первый аргумент — шаблон поиска (from).
  • Второй аргумент — замена (to).
  • Разделитель по умолчанию — /, но можно выбрать любой символ.

Общий вид: s|from|to| — здесь вертикальная черта | служит разделителем.

Результат: часть строки заменяется без изменения остального текста.

Работа с файлами и опция -i

Чтобы изменить файл в месте, используется -i:

echo -e 'one\ntwo\nThree' > sample.txt
cat sample.txt
sed -i 's/two/2/' sample.txt
cat sample.txt
  • > создаёт новый файл или перезаписывает существующий; >> добавляет в конец.
  • sed -i редактирует файл «на месте». На macOS (BSD sed) опция -i требует аргумента для создания резервной копии: -i '' применит изменение без создания файла-резервной копии, -i .bak создаст файл с расширением .bak.

Важно: прежде чем запускать -i на рабочих данных, прогоните ту же команду без -i и проверьте вывод.

Пример редактирования файла с помощью sed

Флаги замены: глобально и нечувствительно к регистру

Команда замены поддерживает дополнительные флаги после завершающего разделителя:

  • g — global, заменить все вхождения в строке (а не только первое).
  • i — case-insensitive, нечувствительность к регистру.

Пример комбинирования и нескольких инструкций:

sed -i 's|h|_H|gi; s|\.com||g' file.txt

Здесь первая инструкция заменяет h на _H во всех вхождениях вне зависимости от регистра; вторая удаляет все .com (заменяет на пустую строку). Обратите внимание на экранирование . как \. в регулярных выражениях.

Более сложная регулярная запись и инструкция sed

Разделители и экранирование

Стандартный разделитель / удобен, но мешает при работе с путями (например, /usr/local/bin). В таких случаях полезно выбрать другой разделитель, например |, # или @:

sed 's|/old/path|/new/path|g' file

Экранируйте специальные символы регулярного выражения (., *, ?, +, ^, $, [], () и др.) обратным слэшем \ при необходимости точного поиска.

Вставка и чтение из файла

sed умеет не только заменять текст, но и вставлять/вставлять содержимое другого файла с помощью команды r (read):

# вставить содержимое inject.txt после каждой второй строки
sed '2~2 r inject.txt' source.txt

В примере ниже мы создаём файл и вставляем разделитель --- после каждой второй строки:

Вставка текста с помощью sed

Команда r принимает имя файла внутри основной инструкции без дополнительного разделителя.

Адресация строк — работа с диапазонами и номерами строк

sed позволяет применять инструкции к определённым строкам или диапазонам:

  • По номеру: 5s/foo/bar/ — выполнить замену только в строке 5.
  • Диапазон: 2,4s/a/b/g — строки с 2 по 4.
  • Регулярное совпадение как адрес: /^#/,/END/ s/old/new/g — от строки, начинающейся с #, до строки содержащей END.
  • Шаги: 1~2 — каждая вторая строка, начиная с 1.

Пример замены только в строках, содержащих 3:

echo -e '1\n2\n3: C\n4' > file.txt
sed '/3/s/C/Z/' file.txt

Изменение конкретной области текста с помощью sed

Обработка вывода других команд

Частый паттерн — брать вывод команды и прогонять через sed. Например:

ls -1 | sed 's/ /_/g'

Это заменит пробелы на подчёркивания в строках вывода ls.

Практические советы по безопасности и тестированию

  • Всегда проверяйте результат без -i: сначала выполните команду и посмотрите вывод.
  • Для массовых правок создавайте резервные копии или используйте контрейнеры/тестовые окружения.
  • На macOS используйте sed -i '' 's/a/b/g' file (обратите внимание на пустую строку после -i).
  • Если команда использует сложные кавычки или переменные оболочки, экранируйте их или используйте кавычки правильного типа.

Важно: регулярные выражения могут вести к неожиданным заменам. Тестируйте на примерах и включайте границы (\b, ^, $) при необходимости.

Когда sed не подойдёт (ограничения и контрпримеры)

  • При сложной логике, условных заменах или парсинге многоуровневых структур (JSON, HTML) лучше использовать специализированные инструменты (jq, html parser, программирование на Python/Perl).
  • Для потоковой аналитики с агрегациями и арифметикой чаще удобнее awk.
  • Если нужно атомарно менять бинарные файлы, sed не лучший выбор.

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

  • awk — мощнее для разбора полей, вычислений и условных правил.
  • perl — имеет чрезвычайно мощные регулярные выражения и подходит для сложных шаблонов и многопозиционных замен.
  • python — самый гибкий для длинных сценариев с библиотеки для работы с JSON, CSV и др.

Короткая матрица выбора:

  • Простая замена в тексте или файле → sed
  • Обработка колонок, вычисления → awk
  • Сложные текстовые трансформации и многопроходная логика → perl/python

Совместимость: GNU sed vs BSD sed (macOS)

  • GNU sed (обычно в Linux): sed -i можно использовать без аргумента.
  • BSD sed (macOS): sed -i требует аргумента для резервной копии; -i '' — применяет изменения без создания бэкапа.

Пример для macOS:

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

Если ваш скрипт должен работать в разных ОС, используйте проверку окружения или избегайте -i и заменяйте файл через временный файл:

sed 's/foo/bar/g' file.txt > file.txt.tmp && mv file.txt.tmp file.txt

Полезные сниппеты и шпаргалка (cheat sheet)

  • Замена первого вхождения в строке: sed 's/old/new/' file
  • Замена всех вхождений в строке: sed 's/old/new/g' file
  • Нечувствительная к регистру: sed 's/old/new/gi' file
  • Редактирование на месте с бэкапом: sed -i.bak 's/old/new/g' file
  • Применить несколько инструкций: sed -e 's/a/b/g' -e 's/c/d/g' file
  • Запустить скрипт sed из файла script.sed: sed -f script.sed file
  • Вставить содержимое файла после строки N: sed 'N r insert.txt' file
  • Удалить строки, содержащие шаблон: sed '/pattern/d' file

Ментальные модели и эвристики

  • Model: sed читает поток построчно и применяет инструкцию(и) к каждой строке по порядку.
  • Heuristic: сначала протестируй на небольшом файле/строке; затем масштабируй на реальные данные.
  • Если вы чувствуете, что начинаете «писать программу» в sed — лучше перейти на Perl/Python.

Рольные чек-листы при использовании sed

Sysadmin:

  • Тестировать команду без -i
  • Держать резервную копию конфигураций
  • Проверять совместимость sed на целевых серверах

Разработчик/DevOps:

  • Интегрировать тесты на CI, если sed используется в билд-скриптах
  • Логировать изменения для отката

Data engineer:

  • Оценить, не лучше ли использовать jq или pandas при структурированных данных
  • Проверить кодировку файлов (UTF-8)

Критерии приёмки

  • Скрипт sed прошёл на тестовом наборе файлов без потери данных.
  • Для массового изменения создана резервная копия или применён безопасный поток (temp-файл).
  • Результаты совпадают с требованиями по форматированию и шаблонам.

Тестовые случаи и приёмочные проверки

  1. Замена простого шаблона — проверить, что все требуемые вхождения заменены.
  2. Нечувствительность к регистру — проверить i флаг.
  3. Исполнение с путями — проверить разные разделители.
  4. Совместимость — проверить поведение на Linux (GNU sed) и macOS (BSD sed).
  5. Резервное восстановление — убедиться в наличии бэкапа или возможности отката.

Быстрый сценарий отката (runbook)

  1. Если использовалась -i.bak, восстановите из .bak: mv file.txt.bak file.txt
  2. Если использовался временный файл как file.txt.tmp, замените: mv file.txt.tmp file.txt
  3. Если изменений много, восстановите из версии контроля (git) или бэкапа.

Решающее дерево для выбора инструмента (Mermaid)

flowchart TD
  A[Нужно преобразовать текст?] --> B{Структура данных}
  B -->|Не структурировано, простые замены| C[Используйте sed]
  B -->|Колонки, вычисления| D[Используйте awk]
  B -->|JSON/CSV| E[Используйте jq или pandas]
  B -->|Сложная логика| F[Используйте perl или python]

Краткое руководство по отладке

  • Добавляйте p (print) и флаг -n для подробного просмотра, что делает sed: sed -n 's/foo/bar/p' file — покажет только строки, где произошла замена.
  • Используйте --debug в GNU sed (если доступно) или разбивайте скрипт на шаги.

Резюме

sed — компактный и быстрый инструмент для массовых текстовых трансформаций в терминале. Для безопасной работы придерживайтесь правил: тестируйте команды без -i, делайте резервные копии, учитывайте различия между реализациями sed и выбирайте другой инструмент (awk, perl, python) при усложнении логики. С начальных простых примеров вы быстро освоите шаблоны, разделители и адресацию строк, а затем сможете комбинировать инструкции и интегрировать sed в скрипты и CI.

Дополнительные ссылки и литература: читайте руководства по регулярным выражениям, документацию GNU sed и руководства по совместимости для macOS.

Important: всегда проверяйте команды и сохраняйте резервные копии перед массовыми изменениями.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство