[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека |
Юридическая информация |
Поиск ]
Программирование: Разработка и отладка программ
Программа sed работает без вмешательства пользователя,
запросившего редактирование. В таком режиме работы sed может
выполнять следующие действия:
- Редактировать большие
файлы.
- Выполнять сложные операции
редактирования несколько раз, не запрашивая (в отличие от интерактивных
редакторов) дополнительного ввода информации и позиционирования
курсора.
- Выполнять глобальные изменения
за один проход.
Редактор хранит в памяти лишь
небольшое количество строк редактируемого файла и не создает временных
файлов. Поэтому длина редактируемого файла ограничена только объемом
памяти, доступной для входного файла и вывода.
Для работы с редактором
необходимо создать командный файл, содержащий команды редактирования входного
файла. Команды редактирования выполняют составные операции, и для их
запуска не требуется вводить большой объем данных в командный файл.
Каждая команда в командном файле должна быть указана на отдельной
строке. После создания этого файла введите в командной строке:
sed -fкомандный-файл >вывод <ввод
У этой команды есть следующие
параметры:
командный_файл
| Имя командного файла, содержащего команды редактирования.
|
Вывод
| Имя файла, в который будет помещен отредактированный вывод.
|
Ввод
| Имя файла (или файлов) для редактирования.
|
После этого программа
sed выполняет необходимые изменения и записывает полученную
информацию в файл вывода. Содержимое входного файла остается без
изменений.
Программа sed - это
потоковый редактор, получающий данные из стандартного ввода, изменяющий их в
соответствии с инструкциями из командного файла и записывающий результирующий
поток в стандартный вывод. Если вы не создадите командный файл и не
укажете флаги для команды sed, то программа sed скопирует стандартный ввод в стандартный вывод без
изменений. Входные данный для этой программы поступают из двух
источников:
Поток ввода
| Поток символов ASCII из файлов или непосредственно с клавиатуры.
Эти данные будут отредактированы программой.
|
Команды
| Набор адресов и связанных команд, указанных для выполнения в следующем
формате:
[Строка1 [,Строка2] ] команда [аргумент]
Параметры
Строка1 и Строка2 называются адресами. Они могут
представлять собой шаблоны, по которым будет выполнен поиск во входных данных,
или номера строк входного потока.
|
Команды редактирования можно
вводить вместе с командой sed с помощью флага -e.
Команда sed построчно
считывает входной поток данных в область памяти, называемую областью
шаблона. После помещения строки данных в область шаблона sed
считывает командный файл и сравнивает адреса в командном файле с символами
этой строки. Если будет встречено совпадение, то sed
выполнит связанную с данным адресом команду над символами области
шаблона. В результате выполнения команды содержимое области шаблона
будет изменено и передано на вход последующих команд.
Сравнив все адреса, указанные в
командном файле, с содержимым области шаблона, программа sed
записывает итоговое содержимое области шаблона в стандартный вывод.
После этого из стандартного ввода считывается следующая строка и повторяется
процесс, задаваемый командным файлом.
Некоторые команды редактирования
изменяют описанную последовательность действий.
На способ выполнения команды
sed влияют и заданные вместе с ней флаги. Дополнительная информация по этому вопросу
приведена в разделе Обзор команд sed.
Регулярное выражение - это
строка, содержащая обычные символы, символы подстановки и/или операторы,
задающие набор вариантов строк. В редакторе потока используются те же
символы подстановки, что и в редакторе ed; они отличаются от
символов подстановки оболочки.
У всех команд sed
однобуквенные имена. Обычно они вызываются с некоторыми параметрами,
например, номерами строк или текстовыми строками. Перечисленные ниже
команды изменяют строки в области шаблона.
В синтаксических диаграммах
применяются следующие символы:
Символ
| Описание
|
[ ]
| В квадратные скобки заключаются необязательные параметры команды.
|
курсив
| Параметры, выделенные курсивом, обозначают значения, которые вы должны
ввести. Например, параметр имя_файла нужно заменить
фактическим именем файла.
|
Строка1
| Этот параметр обозначает номер строки ввода или стандартное выражение для
сравнения, с которого начнется применение команды редактирования.
|
Строка2
| Этот параметр обозначает номер строки ввода или стандартное выражение для
сравнения, на котором закончится применение команды редактирования.
|
Функция
| Синтаксис/Описание
|
добавить строки
| [Строка1]a\\nТекст
Записывает строки, содержащиеся в
блоке Текст, в поток вывода после Строки1.
Команда a указывается в конце строки.
|
изменить строки
| [Строка1 [,Строка2]
]c\\nТекст
Удаляет строки с адресами
Строка1 и Строка2, как и команда удалить
строки. Затем записывает вместо них в поток вывода блок
Текст.
|
удалить строки
| [Строка1 [,Строка2] ]d
Удаляет строки из потока ввода
без последующего копирования их в поток вывода. Будут удалены строки,
начиная со Строки1. Следующей в поток вывода будет
скопирована строка с номером Строка2 + 1. Если вы укажете
только один номер строки, то будет удалена только одна указанная
строка. Если вы не укажете номер строки, то следующая строка не будет
скопирована. Над строками, не скопированными в поток вывода, никакие
действия выполнить нельзя.
|
вставить строки
| [Строка1] i \\nТекст
Записывает строки из блока
Текст в поток вывода перед Строкой1. Команда
i указывается в конце строки.
|
следующая строка
| [Строка1 [,Строка2] ]n
Считывает следующую строку или
группу строк, начиная от Строки1 и заканчивая Строкой2,
в область шаблона. Текущее содержимое области шаблона будет записано в
вывод (если оно не было удалено).
|
Функция
| Синтаксис/Описание
|
подстановка по шаблону
| [Строка1 [,Строка2] ]
s/Шаблон/Строка/Флаги
Выполняет в заданной строке
(строках) поиск последовательности символов, соответствующей регулярному
выражению, заданному в параметре Шаблон. Если такие символы
будут найдены, команда заменит их другим набором символов, задаваемых
параметром Строка.
|
Функция
| Синтаксис/Описание
|
печать строк
| [Строка1 [,Строка2] ] p
Записывает указанные строки в
STDOUT с теми изменениями, которые были внесены в ходе редактирования до
вызова команды p.
|
записать строки
| [строка-1 [,строка-2]
]wимя-файла
Записывает в файл
имя-файла указанные строки с теми изменениями, которые были внесены
в ходе редактирования до вызова команды w.
Если файл с именем
имя-файла существует, то он обновляется; в противном случае он
создается. В процессе редактирования можно задать до 10 различных
файлов ввода или вывода. Между именем команды w и параметром
имя-файла должен быть указан строго один пробел.
|
считать файл
| [строка-1]rимя-файла
Считывает содержимое файла
имя-файла и добавляет его после строки-1.
Между именем команды r
и именем-файла должен быть указан ровно один пробел. Если
файл имя-файла открыть не удастся, то команда будет считать, что
файл пустой. Сообщение об ошибке выдано не будет.
|
Функция
| Синтаксис/Описание
|
объединить строки
| [Строка1 [,Строка2] ]N
Объединяет указанные строки
ввода, подставляя вместо разрыва символ новой строки. Шаблон может
содержать символы из обоих строк.
|
удалить первую строку области шаблона
| [Строка1 [,Строка2] ]D
Удаляет весь текст в области
шаблона до первого символа новой строки (включительно). Если в области
шаблона записана только одна строка, то будет считана следующая строка.
Повторно выполняет все указанные команды редактирования с самого
начала.
|
печатать первую строку области шаблона
| [Строка1 [,Строка2] ]P
Записывает весь текст из области
шаблона до первого символа новой строки (включительно) в STDOUT.
|
Функция
| Синтаксис/Описание
|
скопировать
| [Строка1 [,Строка2] ]h
Копирует текст из области
шаблона, расположенный между Строкой1 и Строкой2, в
промежуточную область.
|
скопировать с добавлением
| [Строка1 [,Строка2] ]H
Копирует текст из области
шаблона, расположенный между Строкой1 и Строкой2, в
промежуточную область путем добавления к хранящейся там информации.
|
вставить копию
| [Строка1 [,Строка2] ]g
Копирует текст из промежуточной
области в область шаблона, вставляя его между Строкой1 и
Строкой2. Содержимое, уже хранящееся в области шаблона,
будет уничтожено.
|
вставить копию с добавлением
| [Строка1 [,Строка2] ]G
Копирует текст из промежуточной
области в область шаблона после блока, ограниченного Строкой1 и
Строкой2. Содержимое, уже хранящееся в области шаблона,
изменено не будет. От добавленного текста его будет отделять символ
новой строки.
|
обмен копиями
| [Строка1 [,Строка2] ]x
Выполняет обмен содержимого
промежуточной области и текста из области шаблона, расположенного между
Строкой1 и Строкой2.
|
Функция
| Синтаксис/Описание
|
отрицание
| [Строка1 [,Строка2] ]!
Символ !
(восклицательный знак) означает, что указанная после него команда должна быть
применена к данным файла ввода, лежащим вне области, ограниченной
строками Строка1 и Строка2.
|
группы команд
| [Строка1 [,Строка2] ]{
набор команд
}
В фигурных скобках ({ })
указывается набор команд, которые должны быть выполнены над строками ввода,
расположенными между Строкой1 и Строкой2. Первая
команда из этого набора должна быть указана в одной строке с левой скобкой или
в следующей после нее строке. Правая скобка должна указываться в
отдельной строке. Допускается вложенность групп команд.
|
метки
| :Метка
Отмечает для каждой ветви
выполнения конечную точку в последовательности команд редактирования.
Метка представляет собой строку длиной до 8 символов. Все
Метки в потоке редактирования должны быть уникальны.
|
безусловный переход к метке
| [Строка1 [,Строка2] ]xМетка
Переход к команде редактирования
с заданной Меткой. Обработка текущего ввода продолжится со
следующей команды. Если задана пустая Метка, то будет
выполнен переход к концу последовательности команд редактирования, после чего
будет считана новая строка ввода, и для нее эта последовательность начнет
выполняться сначала. Указываемая здесь Метка должна быть
предварительно задана в последовательности команд.
|
переход с проверкой
| [Строка1 [,Строка2] ]tМетка
Если в текущей строке ввода была
выполнена хотя бы одна подстановка, то переход к команде с заданной
Меткой. Если подстановка не выполнялась, то команда никаких
действий не выполнит. Флаг, установленный после выполнения подстановки,
сбрасывается. Этот флаг сбрасывается в начале каждой новой строки
ввода.
|
ожидание
| [Строка1 ]q
Останавливает процесс
редактирования следующим образом: записывает в поток вывода текущую
строку и данные о проверке добавления или чтения, после чего редактор
останавливается.
|
определить номер строки
| [Строка1 ]=
Записывает в стандартный вывод
номер строки, совпадающей со Строкой1.
|
Для команд обработки строк
добавить, вставить и изменить задается текст,
который будет добавлен в поток вывода. Этот текст задается в
соответствии со следующими правилами:
- Его длина может составлять как
одну, так и несколько строк.
- Каждый символ новой строки
(\n), включенный в Текст, должен предваряться дополнительным
символом \ (\\n).
- Строка Текст
завершается обычным символом новой строки, без дополнительной косой черты \
(\n).
- После вставки строки
Текст она:
- Всегда записывается в поток
вывода, независимо от действий других команд над строкой, указанной в команде
вставки.
- Не просматривается при поиске
по адресу.
- Не изменяется другими
командами редактирования.
- Не изменяет счетчик
строк.
Команда s заменяет
символы в указанных строках файла ввода. Если команда найдет набор
символов, соответствующий регулярному выражению, заданному в параметре
Шаблон, она заменит их другим набором символов, задаваемым
параметром Строка.
Параметр Строка
представляет собой последовательность символов (цифр, букв и знаков).
Строка может содержать два специальных символа:
Символ
| Назначение
|
&
| Этот символ из поля строка заменяется в строках ввода на
символы, заданные в параметре шаблон. Пример:
|
s/boy/&s/
указывает программе
sed, что нужно найти слово boy в файле ввода и скопировать этот
шаблон в вывод, добавив к нему букву s. Следовательно:
Строка:
| The boy look at the game.
|
Будет заменена на:
| The boys look at the game.
|
Символ
| Назначение
|
\d
| d - одна цифра. Этот символ в параметре
Строка заменяется на символы строки ввода, совпадающие подстрокой
Шаблона номер d. Эти подстроки начинаются и
заканчиваются символом \. Например, команда:
s/\(stu\)\(dy\)/\1r\2/
- Заменяет строку:
- The study chair
- На:
- The sturdy chair
|
Буквы, указываемые в качестве
флагов, задают следующие параметры редактирования:
Символ
| Назначение
|
g
| Заменяет в указанной строке (строках) все вхождения Шаблона на
Строку. После вставки в символах Строки поиск
Шаблона не выполняется. Например, команда:
s/r/R/g
выполняет следующее
действие:
- Заменяет строку:
- the red round rock
- На:
- the Red Round Rock
|
p
| Печатает (в STDOUT) строку, содержащую вхождение
Шаблона.
|
w файл
| Записывает в указанный файл строку, содержащую вхождение
шаблона. Если файл имя_файла существует, он будет
заменен; в противном случае он будет создан. В процессе
редактирования можно задать до 10 различных файлов ввода или вывода.
Между именем команды w и параметром имя_файла должен
быть указан строго один пробел.
|
[ Страница назад | Страница вперед | Содержание | Индекс |
Библиотека |
Юридическая информация |
Поиск ]