SED(1)
НАЗВАНИЕ
sed - пакетный редактор
СИНТАКСИС
sed [-n] [-e сценарий] [-f с_файл] ... [файл ...]
ОПИСАНИЕ
Sed копирует указанные файлы (по умолчанию - стандартный ввод), на стандартный вывод, редактируя их в соответствии с командами сценария. Опция -f приводит к тому, что сценарий берется из с_файла, этих опций может
быть несколько. Если присутствует только опция -e, а
опции -f отсутствуют, флаг -e можно опустить. Опция -n
подавляет вывод, выполняемый по умолчанию. Сценарий
состоит из редактирующих команд (каждая на отдельной
строке), имеющих следующий формат:
[адрес [, адрес]] функция [аргумент ...]
В нормальном режиме sed циклически выполняет следующие
действия:
- Копирует входную строку в буфер (в случае, если
там ничего не осталось от предыдущей команды D).
- Применяет к буферу последовательно все команды
сценария, адреса в которых позволяют их применить.
- Копирует буфер на стандартный вывод (если не указана опция -n) и очищает буфер.
Некоторые команды используют хранилище, чтобы запомнить
весь буфер или его часть для последующего использования.
Адрес - это либо десятичное число, означающее номер
входной строки в совокупности входных файлов, либо $,
означающий последнюю входную строку, либо контекстный
адрес, то есть /регулярное_выражение/ в стиле редактора
ed(1) со следующими модификациями:
- В контекстном адресе конструкция \?регулярное_выражение?, где ? - любой символ, эквивалентна
конструкции /регулярное_выражение/. Например, в
контекстном адресе \xabc\xdefx второй x означает
сам себя, поэтому значением выражения является
abcxdef.
- Управляющая последовательность \n соответствует
символу перевода строки, который включается в буфер.
- Точка . соответствует любому символу, кроме последнего перевода строки в буфере.
- Командная строка без адреса применима к любому буферу.
- Командная строка с одним адресом применима к буферу с соответствующим адресом.
- Командная строка с двумя адресами применима к буферам с адресами в диапазоне от первого до второго
включительно (если второй адрес является числом,
которое не превосходит номера строки, выбранной
первой, обрабатывается только одна строка). Затем
процесс повторяется, начиная с первого адреса.
С помощью функции отрицания ! (см. ниже) команды редак-
тирования могут быть применены к буферу, не попадающему
в указанный диапазон адресов.
В следующем списке функций в скобках указывается макси-
мальное число допустимых адресов для каждой функции.
Аргумент текст состоит из одной или более строк. Все
строки, кроме последней, заканчиваются на \, чтобы экранировать символ перевода строки. Символы \ в тексте
трактуются так же, как в заменяющей цепочке символов
команды 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).