SED(1)

НАЗВАНИЕ
sed - пакетный редактор

СИНТАКСИС


	sed  [-n] [-e сценарий] [-f с_файл] ... [файл ...]

ОПИСАНИЕ
Sed копирует указанные файлы (по умолчанию - стандартный ввод), на стандартный вывод, редактируя их в соответствии с командами сценария. Опция -f приводит к тому, что сценарий берется из с_файла, этих опций может быть несколько. Если присутствует только опция -e, а опции -f отсутствуют, флаг -e можно опустить. Опция -n подавляет вывод, выполняемый по умолчанию. Сценарий состоит из редактирующих команд (каждая на отдельной строке), имеющих следующий формат:

[адрес [, адрес]] функция [аргумент ...]

В нормальном режиме sed циклически выполняет следующие действия:

  1. Копирует входную строку в буфер (в случае, если там ничего не осталось от предыдущей команды D).
  2. Применяет к буферу последовательно все команды сценария, адреса в которых позволяют их применить.
  3. Копирует буфер на стандартный вывод (если не указана опция -n) и очищает буфер.

Некоторые команды используют хранилище, чтобы запомнить весь буфер или его часть для последующего использования.

Адрес - это либо десятичное число, означающее номер входной строки в совокупности входных файлов, либо $, означающий последнюю входную строку, либо контекстный адрес, то есть /регулярное_выражение/ в стиле редактора ed(1) со следующими модификациями:

  1. В контекстном адресе конструкция \?регулярное_выражение?, где ? - любой символ, эквивалентна конструкции /регулярное_выражение/. Например, в контекстном адресе \xabc\xdefx второй x означает сам себя, поэтому значением выражения является abcxdef.
  2. Управляющая последовательность \n соответствует символу перевода строки, который включается в буфер.
  3. Точка . соответствует любому символу, кроме последнего перевода строки в буфере.
  4. Командная строка без адреса применима к любому буферу.
  5. Командная строка с одним адресом применима к буферу с соответствующим адресом.
  6. Командная строка с двумя адресами применима к буферам с адресами в диапазоне от первого до второго включительно (если второй адрес является числом, которое не превосходит номера строки, выбранной первой, обрабатывается только одна строка). Затем процесс повторяется, начиная с первого адреса.

С помощью функции отрицания ! (см. ниже) команды редак- тирования могут быть применены к буферу, не попадающему в указанный диапазон адресов.

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

Аргумент текст состоит из одной или более строк. Все строки, кроме последней, заканчиваются на \, чтобы экранировать символ перевода строки. Символы \ в тексте трактуются так же, как в заменяющей цепочке символов команды s, и могут использоваться для экранирования начальных пробелов и табуляций, которые обычно из командной строки удаляются. Аргументы ч_файл и з_файл должны быть последними в строке, перед ними должен быть ровно один пробел. Все з_файлы создаются до начала работы. Может быть до 10 различных з_файлов.
(1)a\ текст Добавить. Вывести текст перед чтением следующей входной строки.
(2)b метка Перейти к команде :, содержащей метку. Если метка пуста, перейти на конец сценария.
(2)c\ текст Заменить. Удалить содержимое буфера. При 0 или 1 адресе или в конце 2-адресного диапазона вывести текст. Начать новый цикл.
(2)d Удалить содержимое буфера. Начать новый цикл.
(2)D Удалить начало буфера, до первого перевода стро- ки. Начать новый цикл.
(2)g Заменить содержимое буфера содержимым хранилища.
(2)G Добавить к содержимому буфера содержимое хранили- ща.
(2)h Заменить содержимое хранилища содержимым буфера.
(2)H Добавить к содержимому хранилища содержимое буфе- ра.
(1)i\ текст Вставить. Вывести текст.
(2)l Вывести буфер, заменяя непечатные символы на пары символов ASCII и разбивая длинные строки.
(2)n Скопировать буфер на стандартный вывод. Заменить содержимое буфера на следующую входную строку.
(2)N Добавить к буферу следующую входную строку с сох- ранением символа перевода строки. (Текущий номер строки изменяется).
(2)p Скопировать буфер на стандартный вывод.
(2)P Скопировать начальный сегмент буфера (до первого перевода строки) на стандартный вывод.
(1)q Выйти. Перейти на конец сценария. Нового цикла не начинать.
(2)r ч_файл Прочитать содержимое ч_файла. Поместить его на стандартный вывод перед чтением следующей входной строки.

(2)s/регулярное_выражение/замена/флаги
Подставить замену вместо фрагментов буфера, отождествленных с регулярным_выражением. Вместо / можно использовать любой символ. Детали см. в ed(1). Флаги могут быть опущены или иметь следующие значения:
g Заменить все вхождения регулярного_выражения, а не только первое.
p Если замена произошла, вывести содержимое буфера.
w з_файл Если замена произошла, добавить содержимое буфера к з_файлу.
(2)t метка Проверить. Перейти к команде :, содержащей метку, если со времени последнего чтения входной строки или последнего выполнения команды t в буфере выполнялись подстановки. Если метка пуста, перейти на конец сценария.
(2)w з_файл Записать. Добавить содержимое буфера к з_файлу.
(2)x Обменять содержимое буфера и хранилища.
(2)y/цепочка1/цепочка2/
Заменить все символы буфера, содержащиеся в цепочке1, на соответствующие символы цепочки2. Длины цепочек должны совпадать.
(2)! функция Отрицание. Применить функцию (или группу, если функция начинается с {) только к строкам, которые не соответстуют адресам.
(0): метка Не делает ничего. Содержит лишь метку, на которую может быть осуществлен переход командами t или b.
(1)= Вывести в качестве отдельной строки номер текущей строки.
(2){ Выполнить следующие команды, вплоть до соответст- вующего символа }.
(0) Пустая команда.

СМ. ТАКЖЕ
awk(1), ed(1), grep(1).