[  Страница назад | Страница вперед  |  Содержание  |  Индекс  | Библиотека | 
Юридическая информация | 
Поиск ] 
 
Программирование: Разработка и отладка программ
Программа 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 и параметром имя_файла должен
быть указан строго один пробел.
 | 
  [  Страница назад | Страница вперед  |  Содержание  |  Индекс  |
 
Библиотека | 
Юридическая информация | 
Поиск  ]