Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
sed [2025/07/06 12:39] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Редактор sed ======
 +~~Title: Как использовать sed: Практические примеры для начинающих ~~
 +{{htmlmetatags>
 +metatag-description=(Практические примеры и легкие для понимания инструкции по работе с редактором sed.)
 +}}
  
 +{{ ::sed_redaktor_01.jpg?nolink |}}
 +  * [[RegExp]]
 +  * [[utility_os_nix#tekstovye_redaktory_processory|Текстовые редакторы (процессоры)]]
 +
 +**sed** (Stream EDitor) - потоковый неинтерактивный текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.
 +
 +sed получает входной поток (обычно файл) построчно, редактирует каждую строку согласно правилам, определённым в sed- скрипте с использованием простого языка sed, и затем выводит результат в выходной поток. sed отличается от обычных текстовых редакторов "инвертированностью" по отношению к тексту и набору команд редактирования. Обычные текстовые редакторы вначале загружают весь текст документа, а затем применяют к нему команды по одной, в то время как sed вначале загружает в себя набор команд, а затем применяет весь набор команд к каждой строчке текста. Так как одновременно в памяти находится только одна строка, sed может обработать произвольно большие текстовые файлы.
 +
 +sed вызывается следующим образом:
 +<file>
 +sed options file
 +</file>
 +Где опции - это указание на то, как редактировать файл и путь к файлe, который необходимо отредактировать.
 +
 +**Модификаторы**:
 +  * **g**. sed по умолчанию заменяет только первое найденное слово. Модификатор g указывает заменять все найденные совпадения в строке.
 +  * **i**. Установить регистронезависимый режим.
 +
 +===== Примеры использования редактора sed =====
 +Эти примеры покрывают основные задачи, которые часто выполняются с помощью sed.
 +==== Редактирование в файле (in-place) ====
 +Заменить текст в файле, сохраняя исходный файл с расширением .bak
 +
 +<file bash>
 +sed -i.bak 's/text1/text2/g' filename
 +или так
 +cat lost_cdr.sql | sed 's/DEFAULT, 2/DEFAULT, 1/g' > lost_cdr_nas1.sql
 +</file>
 +Прямая замена текста в файле без сохранения исходного файла
 +<file bash>
 +sed -i 's/text1/text2/g' filename
 +</file>
 +
 +Замена при помощи переменных. Обратите внимание на ключ -i, он указывает изменить данные в файле [[nginx_simple_example|nginx.conf]], если ключ -i убрать sed откроет файл, сделает замену и выведет измененную версию на экран (nginx.conf не будет изменен).
 +<file bash>
 +export OLD_IP=12.1.1.1
 +export NEW_IP=122.33.44.55
 +sed -i "s/$OLD_IP/$NEW_IP/" /etc/nginx/nginx.conf
 +</file>
 +==== Вывод определенных строк ====
 +Вывести третью строку из файла .bash_history
 +<file bash>
 +sed -ne 3p .bash_history
 +OR
 +sed -n '3p;3q' .bash_history
 +</file>
 +Вывести только строки, соответствующие шаблону
 +<file bash>
 +sed -n '/pattern/p' filename
 +Например, отобразить только строки содержание "dieg.dev"
 +sed -n '/dieg.dev/p' /etc/zabbix/zabbix_agentd.conf
 +</file>
 +Вывести строки с 5 по 10
 +<file bash>
 +sed -n '5,10p' filename
 +</file>
 +Взять из файла с первой по восьмую строки и из них вывести первые пять
 +<file bash>
 +sed -n '1,8p;5q' filename
 +</file>
 +==== Вставка и добавление текста ====
 +Вставить строку перед каждой строкой, соответствующей шаблону
 +<file bash>
 +sed '/pattern/i\New line' filename
 +</file>
 +Добавить строку после каждой строки, соответствующей шаблону
 +<file bash>
 +sed '/pattern/a\New line' filename
 +</file>
 +==== Удаление строк ====
 +Удалить пустые строки из файла
 +<file bash>
 +sed '/^$/d' filename
 +</file>
 +Удалить пустые строки и комментарии в файле
 +<file bash>
 +sed -i.bak '/ *#/d; /^$/d' filename
 +</file>
 +Удалить первую строку файла
 +<file bash>
 +sed '1d' filename
 +</file>
 +Удалить последнюю строку файла
 +<file bash>
 +sed '$d' filename
 +</file>
 +Удалить строки с 10 по 20
 +<file bash>
 +sed '10,20d' filename
 +</file>
 +Удалить пустые символы в конце каждой строки
 +<file bash>
 +sed -e 's/ *$//' filename
 +</file>
 +Удалить строку "string1" из текста не изменяя всего остального
 +<file bash>
 +sed -e 's/string1//g'
 +</file>
 +==== Замена текста ====
 +Заменить первое вхождение "text1" на "text2" в каждой строке
 +<file bash>
 +sed 's/text1/text2/' filename
 +</file>
 +Заменить все вхождения "text1" на "text2" в каждой строке
 +<file bash>
 +sed 's/text1/text2/g' filename
 +</file>
 +Заменить последовательность из любого количества нулей одним нулём
 +<file bash>
 +sed -e 's/0*/0/g' example.txt
 +</file>
 +
 +===== Пример: вырезать кусок текста из лог- файла =====
 +Вырезать кусок текста из лог- файла. Лог имеет метки времени. Зная метку начала и конца нужного нам куска лога, мы можем при помощи утилиты [[grep|grep]] найти номера строк начала и конца. И при помощи sed вырезать нужный нам кусок лога.
 +<file bash cutlog.sh>
 +#!/bin/sh
 +
 +FILE="path to file"
 +START=`grep -n '2014-11-29 04:51:23.253790' "$FILE" | cut -f1 -d:`
 +END=`grep -n '2014-11-29 04:51:23.255933' "$FILE" | cut -f1 -d:`
 +
 +sed -n "$START,$END p" $FILE
 +</file>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!