SED представлен потоковым текстовым редактором. В интерактивных текстовых редакторах, наподобие nano, с текстами работают, используя клавиатуру, редактируя файлы, добавляя, удаляя или изменяя тексты. Седло позволяет редактировать потоки данных, настройку заданных разработчиком набора правил. Вот как выглядит схема вызова этой команды:
По умолчанию sed применяет функцию при вызове правила, выраженные в виде набора команд, к
По умолчанию sed применяет функцию при вызове правила, выраженные в виде набора команд, к
STDIN
. Это позволяет данные непосредственно sed. Например, так:
Вот что получится при выполнении этой команды.
Простой пример вызова sed
В данном случае sed заменяет слово «test» в строке, переданной для обработки, словами «другой тест». Для оформления правил обработки текста, заключённого в кавычки, используются прямые слэши. В нашем случае применена команда вида
Выше приведён примитивный пример использования sed, нужный вам пример в курс дела. На самом деле, sed можно применить в гораздо более сложных сценариях обработки текстов, например - для работы с силами.
Ниже показан файл, в котором содержится фрагмент текста, и его обработка такой командой:
Текстовый файл и результаты его обработки
Здесь применён тот же подход, который мы использовали выше, но sed теперь обрабатывает текст, хранящийся в файле. При этом обрабатываются, обрабатываются данные, порциями и выводится то, что обработано, на экран, не дожидаясь обработки всего файла.
Sed не меняет данные в обрабатываемом файле. Редактор читает файл, обрабатывает прочитанное, и отправляет то, что получилось, в
Для выполнения нескольких действий с данными, используйте ключ
Использование ключа -e при вызове sed
К каждой строке текста из файла применяются обе команды. Их нужно разделить точкой с запятой, при этом между окончанием команды и точкой с запятой не должно быть пробела.
Для ввода нескольких шаблонов обработки текста при вызове sed, можно, после ввода первой одиночной кавычки, нажать Enter, после чего ввести правило с новой строки, не забыть о закрывающей кавычке:
Вот что получится после того, как команда, представленная в таком виде, будет выполнена.
Другой способ работы с sed
Если имеется набор команд sed, обычно удобнее всего записать их в файл. Для того, чтобы указать файл, выполните команду, используйте ключ
Вот содержимое файла
Вызовем sed, передается файл с командой и файл для обработки:
Результат при вызове такой команды аналогичен тому, который получался в предыдущих примерах.
Использование файла с командами при вызове sed
Внимательно посмотрите на следующий пример.
Вот что содержится в файле, и что будет получено после его обработки sed.
Исходный файл и результаты его обработки
Команда замены нормально обрабатывает файл, состоящий из нескольких строк, но заменяются только первые вхождения искомого фрагмента текста в каждой строке. Для того, чтобы заменить все вхождения шаблона, нужно использовать соответствующий флаг.
Схема записи команды замены при использовании флагов выглядит так:
Выполнение этой команды можно модифицировать использование средств.
Рассмотрим использование варианта замены команды, с указанием позиции заменяемого в искомого фрагмента:
Вызов команды замены с указанием позиции заменя фрагмента.
Мы указали, в качестве флага замены, число 2. Это было заменено вторым вхождение искомого шаблона в каждой строке. Теперь опробуем флаг глобальной замены -
Как видно из результатов вывода, такая команда заменила все вхождения шаблона в тексте.
Глобальная замена
команды замены
Как результат, при запуске sed в такой конфигурации на экран выводятся лишь строки (в случае - одна строка), в котором найден заданный фрагмент текста.
Использование флага команды замены p
Воспользуемся флагом
Сохранение результатов обработки текста в файле
Хорошо видно, что в ходе работы команды данные выводятся в STDOUT , при этом обработанные строки записываются в файл, имя которого указано после
Представьте, что нужно заменить
Однако, выглядит всё это не очень-то хорошо. Все дело в том, что так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать. В результате страдает читаемость команды.
К счастью, sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены. Разделителем считается первый символ, который будет встречен после
В данном случае используется разделителя восклицательный знак, в результате чего код читать и он выглядит куда опрятнее, чем прежде.
До сих пор мы вызывали sed для обработки всего переданного редактора потока данных. В некоторых случаях с помощью sed надо обработать лишь какую-то часть текста - некую конкретную строку или группу строк. Для достижения такой цели можно использовать двумя подходами:
Рассмотрим первый подход. Тут допустимо два варианта. Первый, рассмотренный ниже, предусматривает указание номера одной строки, которую нужно обработать:
Обработка только одной строки, номер который задан при вызове sed
Вот что получится при выполнении этой команды.

Простой пример вызова sed
В данном случае sed заменяет слово «test» в строке, переданной для обработки, словами «другой тест». Для оформления правил обработки текста, заключённого в кавычки, используются прямые слэши. В нашем случае применена команда вида
s/pattern1/pattern2/
. Буква «s» - это сокращение слова «заменитель», то есть - перед нами команда замены. Sed, выполняя эту команду, просмотренный переданный текст и заменит найденные в нём фрагменты (о том - какие именно, поговорим ниже), соответствующие pattern1
, на pattern2
. Выше приведён примитивный пример использования sed, нужный вам пример в курс дела. На самом деле, sed можно применить в гораздо более сложных сценариях обработки текстов, например - для работы с силами.
Ниже показан файл, в котором содержится фрагмент текста, и его обработка такой командой:
Текстовый файл и результаты его обработки
Здесь применён тот же подход, который мы использовали выше, но sed теперь обрабатывает текст, хранящийся в файле. При этом обрабатываются, обрабатываются данные, порциями и выводится то, что обработано, на экран, не дожидаясь обработки всего файла.
Sed не меняет данные в обрабатываемом файле. Редактор читает файл, обрабатывает прочитанное, и отправляет то, что получилось, в
STDOUT
. Для того, чтобы убедиться в том, что исходный файл не изменился, достаточно, после того, как он был передан sed, открыть его. При необходимости вывода sed можно перенаправить в файл, возможно - перезаписать старый файл. Если вы знакомы с одним из предыдущих материалов Вывод этой серии может быть выполнен.Выполнение наборов команд при вызове sed
Для выполнения нескольких действий с данными, используйте ключ
-e
при вызове sed. Например, вот как организовать замену двух фрагментов текста:
Использование ключа -e при вызове sed
К каждой строке текста из файла применяются обе команды. Их нужно разделить точкой с запятой, при этом между окончанием команды и точкой с запятой не должно быть пробела.
Для ввода нескольких шаблонов обработки текста при вызове sed, можно, после ввода первой одиночной кавычки, нажать Enter, после чего ввести правило с новой строки, не забыть о закрывающей кавычке:
Вот что получится после того, как команда, представленная в таком виде, будет выполнена.

Другой способ работы с sed
Чтение команд из файла
Если имеется набор команд sed, обычно удобнее всего записать их в файл. Для того, чтобы указать файл, выполните команду, используйте ключ
-f
: Вот содержимое файла
mycommands
:Вызовем sed, передается файл с командой и файл для обработки:
Результат при вызове такой команды аналогичен тому, который получался в предыдущих примерах.

Использование файла с командами при вызове sed
Флаги команды замены
Внимательно посмотрите на следующий пример.
Вот что содержится в файле, и что будет получено после его обработки sed.

Исходный файл и результаты его обработки
Команда замены нормально обрабатывает файл, состоящий из нескольких строк, но заменяются только первые вхождения искомого фрагмента текста в каждой строке. Для того, чтобы заменить все вхождения шаблона, нужно использовать соответствующий флаг.
Схема записи команды замены при использовании флагов выглядит так:
Выполнение этой команды можно модифицировать использование средств.
- При передаче номера учитывается порядковый номер вхождения кода в строке, заменено будет именно это вхождение.
- Флаг
g
указывает на то, что нужно обработать все вхождения в шаблоне формы в строке. - Флаг
p
указывает на то, что нужно вывести содержимое исходной строки. - Флаг вида
w file
указывает на команду то, что нужно записать результаты обработки текста в файл.
Рассмотрим использование варианта замены команды, с указанием позиции заменяемого в искомого фрагмента:

Вызов команды замены с указанием позиции заменя фрагмента.
Мы указали, в качестве флага замены, число 2. Это было заменено вторым вхождение искомого шаблона в каждой строке. Теперь опробуем флаг глобальной замены -
g
:Как видно из результатов вывода, такая команда заменила все вхождения шаблона в тексте.

Глобальная замена
команды замены
p
позволяет выводить строки, в которых найдены совпадения, при этом ключ -n
, при вызове sed, подавляет обычный вывод:Как результат, при запуске sed в такой конфигурации на экран выводятся лишь строки (в случае - одна строка), в котором найден заданный фрагмент текста.

Использование флага команды замены p
Воспользуемся флагом
w
, который позволяет сохранить результаты обработки текста в файл:
Сохранение результатов обработки текста в файле
Хорошо видно, что в ходе работы команды данные выводятся в STDOUT , при этом обработанные строки записываются в файл, имя которого указано после
w
.Символы-разделители
Представьте, что нужно заменить
/bin/bash
на /bin/csh
в файле /etc/passwd
. Задача не такая уж и сложная:Однако, выглядит всё это не очень-то хорошо. Все дело в том, что так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать. В результате страдает читаемость команды.
К счастью, sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены. Разделителем считается первый символ, который будет встречен после
s
:В данном случае используется разделителя восклицательный знак, в результате чего код читать и он выглядит куда опрятнее, чем прежде.
Выбор фрагментов текста для обработки
До сих пор мы вызывали sed для обработки всего переданного редактора потока данных. В некоторых случаях с помощью sed надо обработать лишь какую-то часть текста - некую конкретную строку или группу строк. Для достижения такой цели можно использовать двумя подходами:
- Задать ограничение на номера обрабатываемых строк.
- Указать фильтр, соответствующие строки нужно обработать.
Рассмотрим первый подход. Тут допустимо два варианта. Первый, рассмотренный ниже, предусматривает указание номера одной строки, которую нужно обработать:

Обработка только одной строки, номер который задан при вызове sed
Второй вариант - диапазон строк:
Обработка диапазона строки
того, что можно вызвать команду замены так, чтобы файл был обработан начиная с некоей строки и до конца:
Обработка файла начиная со второй строки и до конца
Для того, чтобы обработать с помощью команды только строки, соответствующего заданного фильтруру, вызвать так:
Источник:

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

Обработка файла начиная со второй строки и до конца
Для того, чтобы обработать с помощью команды только строки, соответствующего заданного фильтруру, вызвать так:
Источник: