SED(1)
НАЗВАНИЕ
sed - пакетный редактор
СИНТАКСИС
sed [-n] [-e сценарий] [-f с_файл] ... [файл ...]
ОПИСАНИЕ
Sed копирует указанные файлы (по умолчанию - стандартный ввод), на стандартный вывод, редактируя их в соответствии с командами сценария. Опция -f приводит к тому, что сценарий берется из с_файла, этих опций может быть несколько. Если присутствует только опция -e, а опции -f отсутствуют, флаг -e можно опустить. Опция -n подавляет вывод, выполняемый по умолчанию. Сценарий состоит из редактирующих команд (каждая на отдельной строке), имеющих следующий формат:
[адрес [, адрес]] функция [аргумент ...]
В нормальном режиме sed циклически выполняет следующие действия:
Копирует входную строку в буфер (в случае, если там ничего не осталось от предыдущей команды D). Применяет к буферу последовательно все команды сценария, адреса в которых позволяют их применить. Копирует буфер на стандартный вывод (если не указана опция -n) и очищает буфер.
Некоторые команды используют хранилище, чтобы запомнить весь буфер или его часть для последующего использования.
Адрес - это либо десятичное число, означающее номер входной строки в совокупности входных файлов, либо $, означающий последнюю входную строку, либо контекстный адрес, то есть /регулярное_выражение/ в стиле редактора со следующими модификациями:
В контекстном адресе конструкция \?регулярное_выражение?, где ? - любой символ, эквивалентна конструкции /регулярное_выражение/. Например, в контекстном адресе \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 ч_файл |
Прочитать содержимое ч_файла. Поместить его на стандартный вывод перед чтением следующей входной строки. <
/p>
(2)s/регулярное_выражение/замена/флаги
Подставить замену вместо фрагментов буфера, отождествленных с регулярным_выражением. Вместо / можно использовать любой символ. Детали см. в . Флаги могут быть опущены или иметь следующие значения:
g Заменить все вхождения регулярного_выражения, а не только первое. |
p Если замена произошла, вывести содержимое буфера. |
w з_файл |
Если замена произошла, добавить содержимое буфера к з_файлу.
(2)t метка |
Проверить. Перейти к команде :, содержащей метку, если со времени последнего чтения входной строки или последнего выполнения команды t в буфере выполнялись подстановки. Если метка пуста, перейти на конец сценария.
(2)w з_файл |
Записать. Добавить содержимое буфера к з_файлу.
(2)x Обменять содержимое буфера и хранилища. |
(2)y/цепочка1/цепочка2/
Заменить все символы буфера, содержащиеся в цепочке1, на соответствующие символы цепочки2. Длины цепочек должны совпадать.
(2)! функция |
Отрицание. Применить функцию (или группу, если функция начинается с {) только к строкам, которые не соответстуют адресам.
(0): метка |
Не делает ничего. Содержит лишь метку, на которую может быть осуществлен переход командами t или b.
(1)= Вывести в качестве отдельной строки номер текущей строки. |
(2){ Выполнить следующие команды, вплоть до соответст- вующего символа }. |
(0) Пустая команда. |
СМ. ТАКЖЕ
, , .
|
|
Содержание раздела