Команда sed в Linux: подробное руководство

    Команда Simple-Server
    03.06.2026
    7 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    1. Читает одну строку из входного потока данных и передает ее в свой буфер шаблонов. Под потоком данных понимают файл или стандартный ввод (stdin).

    2. Последовательно применяет к строке указанные команды.

    3. Выводит содержимое буфера шаблонов.

    4. Переходит к следующей строке.

    Читает одну строку из входного потока данных и передает ее в свой буфер шаблонов. Под потоком данных понимают файл или стандартный ввод (stdin).

    Последовательно применяет к строке указанные команды.

    Выводит содержимое буфера шаблонов.

    Переходит к следующей строке.

    При этом по умолчанию sed не меняет содержимое исходного файла. Чтобы вносить изменения в исходный файл, необходимо явно указать опцию.

    Синтаксис утилиты sed следующий:

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

    Рассмотрим на простом примере. Предположим, у нас есть файл new-file.txt, в котором указано три строки со словом «привет»:

    Необходимо заменить все слова «привет» на «мир» и вывести результат на экран без изменения исходного файла. Для этого используем команду:

    sed 's/привет/мир/g' new-file.txt
    • s — команда для замены.

    • 's/привет/мир/g' — строка с командой, которая производит замену. Состоит из нескольких частей:

    * `s` — команда для замены. * `/` — разделитель. Можно использовать любой другой символ. * `привет` — можно использовать как регулярные выражения, так и слова. Здесь мы указываем слово, которое хотим заменить. * `мир` — строка замены. Здесь мы обозначаем, на что меняем. * `g` — отвечает за глобальную замену: заменяются все вхождения шаблона в каждой строке.
    • new-file.txt — имя обрабатываемого файла.

    's/привет/мир/g' — строка с командой, которая производит замену. Состоит из нескольких частей:

    • s — команда для замены.

    • / — разделитель. Можно использовать любой другой символ.

    • привет — можно использовать как регулярные выражения, так и слова. Здесь мы указываем слово, которое хотим заменить.

    • мир — строка замены. Здесь мы обозначаем, на что меняем.

    • g — отвечает за глобальную замену: заменяются все вхождения шаблона в каждой строке.

    / — разделитель. Можно использовать любой другой символ.

    привет — можно использовать как регулярные выражения, так и слова. Здесь мы указываем слово, которое хотим заменить.

    мир — строка замены. Здесь мы обозначаем, на что меняем.

    g — отвечает за глобальную замену: заменяются все вхождения шаблона в каждой строке.

    new-file.txt — имя обрабатываемого файла.

    В таблице ниже приведены часто используемые команды утилиты sed. Более подробную информацию можно найти в официальной документации.

    ОпцияЧто делаетПример команды
    sЗаменяет значениеsed 's/cat/dog/g' animals.txt
    Заменяет все слова «cat» на слово «dog». Исходный файл изменен не будет.
    iЗаменяет значения в исходном файлеsed -i 's/cat/dog/g' animals.txt
    Заменяет все слова «cat» на слово «dog». Исходный файл будет изменен.
    dУдаляет строкуsed '/^\s*#/d' nginx.conf
    Удаляет все строки, начинающиеся с символа комментария #. Исходный файл изменен не будет.
    pВыводит строкиsed -n '5,10p' list.txt
    Выведет только строки, которые начинаются с 5 по 10. Исходный файл изменен не будет.
    aДобавляет текст после строкиsed '/server /a\ allow all;' nginx.conf
    Добавит новую строку со значением allow all после строки, где есть слово «server». Исходный файл изменен не будет.
    cЗаменяет всю строкуsed '3c# Эта третья строка теперь комментарий' config.txt
    Третья строка будет заменена на новое значение: Эта третья строка теперь комментарий. Исходный файл изменен не будет.
    yЗаменяет символыsed 'y/abc/ABC/' letters.txt
    Меняет регистр букв abc на ABC.
    Все остальные символы не будут затронуты. Исходный файл изменен не будет.
    =Выводит номер строкиsed -n '$=' file2.txt
    Выведет общее количество строк в файле.
    qВыходит после выполнения командыsed '10q' access.log
    Выведет только первые 10 строк и завершит свое выполнение.
    wЗаписывает строки в файлsed -n '/ERROR/w errors.txt' auth.log
    Ищет строки, содержащие слово «ERROR» в файле auth.log и записывает их в файл errors.txt.

    sed 's/cat/dog/g' animals.txt
    Заменяет все слова «cat» на слово «dog». Исходный файл изменен не будет.

    Заменяет значения в исходном файле

    sed -i 's/cat/dog/g' animals.txt
    Заменяет все слова «cat» на слово «dog». Исходный файл будет изменен.

    sed '/^\s*#/d' nginx.conf
    Удаляет все строки, начинающиеся с символа комментария #. Исходный файл изменен не будет.

    sed -n '5,10p' list.txt
    Выведет только строки, которые начинаются с 5 по 10. Исходный файл изменен не будет.

    Добавляет текст после строки

    sed '/server /a\ allow all;' nginx.conf
    Добавит новую строку со значением allow all после строки, где есть слово «server». Исходный файл изменен не будет.

    sed '3c# Эта третья строка теперь комментарий' config.txt
    Третья строка будет заменена на новое значение: Эта третья строка теперь комментарий. Исходный файл изменен не будет.

    sed 'y/abc/ABC/' letters.txt
    Меняет регистр букв abc на ABC.
    Все остальные символы не будут затронуты. Исходный файл изменен не будет.

    sed -n '$=' file2.txt
    Выведет общее количество строк в файле.

    Выходит после выполнения команды

    sed '10q' access.log
    Выведет только первые 10 строк и завершит свое выполнение.

    sed -n '/ERROR/w errors.txt' auth.log
    Ищет строки, содержащие слово «ERROR» в файле auth.log и записывает их в файл errors.txt.

    Практическое применение sed

    Для наглядности рассмотрим практические примеры использования утилиты sed. Устанавливать утилиту не надо — она уже автоматически предустановлена практически во всех современных дистрибутивах Linux\Unix.

    Заменить все слова user на dev-user в файле main.txt:

    sed 's/user/dev-user/g' main.txt

    Следующий пример аналогичен команде выше, но результат будет сохранен в новый файл с именем new-main.txt:

    sed 's/user/dev-user/g' main.txt > new-main.txt

    Заменить все слова "user" на "dev-user" в файле main.txt. При этом исходный файл main.txt будет перезаписан:

    sed -i 's/user/dev-user/g' main.txt

    Заменить слово “user” на “dev-user” только во второй строке:

    sed 's/user/dev-user/2' main.txt

    Заменить все слова «http» во всех строках на «https» и перезаписать изменения в исходном файле urls.txt:

    sed -i 's/http/https/g' urls.txt

    Заменить все запятые на точки с запятой в файле data.csv:

    sed -i 's/,/;/g' data.csv

    Удаление строк и символов

    Удалить все строки, которые начинаются с символа комментария #:

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

    Удалить строки с пятой по десятую:

    Предположим, у нас есть файл с HTML-страницей. Нам необходимо удалить все теги (символы <>):

    sed 's/<[^>]*>//g' index.html

    Очистка лог-файла от IP-адресов

    Представим ситуацию: вы работаете с лог-файлом доступа Nginx (access.log). В файл записываются IP-адреса источников, однако один и тот же IP-адрес может обращаться к нескольким ресурсам одновременно. Вам нужно подготовить отчет, предварительно удалив из файла все IP-адреса, а также символы - -, которые перечислены после каждого IP-адреса. Изменения необходимо записать в новый файл access_modified.log. Для этого используем команду:

    sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3} - - //g' access.log > access_modified.log

    Массовое редактирование конфигурационных файлов

    Вы — администратор сервера в компании-интеграторе и отвечаете за миграцию инфраструктуры. После переезда в нескольких десятках конфигурационных файлов с расширением .conf поменялся IP-адрес базы данных. Старый IP-адрес — 192.168.1.100 — необходимо заменить на новый 10.0.1.50. Воспользуемся следующей командой sed для решения задачи:

    find . -name "*.conf" -exec sed -i 's/192\.168\.1\.100/10.0.1.50/g' {} \;

    Обратите внимание, что мы экранировали символ точки (\.), так как в регулярных выражениях точка означает «любой символ».

    Извлечение IP-адресов из лог-файлов

    Вы администрируете веб-сервер Nginx. Служба безопасности просит вас прислать список IP-адресов пользователей, которые посещают ресурсы веб-сайта компании, для дальнейшего анализа. При помощи утилиты sed извлечем только уникальные IP-адреса и отсортируем их:

    sed -E 's/^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/' access.log | sort -u > ip_addresses.txt

    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны