mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

      ED(1)                                                     ED(1)

      НАЗВАНИЕ
              ed - текстовый редактор

      СИНТАКСИС
              ed  [-s] [-p приглашение] [файл]

      ОПИСАНИЕ
              Текстовый редактор ed является  стандартным  для  UNIX
              систем. Если в командной строке задан файл, он считыва-
              ется  в  буфер (как будто была выполнена команда e, см.
              ниже) и его можно редактировать.

              Опциям команды ed приписан следующий смысл:

              -s   Подавить печать количества символов при выполнении
                   команд e, r и w, выдачу диагностики команд e и q и
                   префикса ! после выполнения конструкции !команда.

              -p приглашение
                   Задать  в качестве приглашения свою цепочку симво-
                   лов.

              Редактор ed работает с копией файла; изменения,  произ-
              водимые  над  копией, отображаются на файл только после
              выполнения команды записи w. Копия  текста  размещается
              редактором  во временном файле, называемом буфером. Бу-
              фер только один.

              Редактор  поддерживает  спецификацию формата текстового
              файла [см. fspec(4)]. Если первая строка редактируемого
              файла содержит спецификацию формата, а у  терминала,  с
              которого  вызван  ed,  задана  характеристика -tabs или
              tab3 [см. stty(1)], то при просмотре файла нужные пози-
              ции табуляции будут установлены  автоматически.  Напри-
              мер, если в первой строке файла содержится:

                   <:t5,10,15 s72:>

              то позиции табуляции будут установлены  в  колонках  5,
              10,  15, а максимальная длина строки составит 72. Отме-
              тим, что при вводе текста, независимо  от  спецификации
              формата, происходит замена символов табуляции пробелами
              до ближайшей колонки, кратной восьми.

              Команды  ed имеют простую и регулярную структуру: ноль,
              один или два адреса предшествуют односимвольной  коман-
              де, после которой могут располагаться ее аргументы. Ад-
              реса  задают  одну или несколько строк из буфера. Отме-
              тим, что каждая команда, требующая адресации, может ад-
              ресоваться по умолчанию, то есть  адреса  указывать  не
              обязательно.

              Как правило, в строке может содержаться только одна ко-
              манда. Ряд команд позволяет вводить текст, который раз-
              мещается  в  определенном  месте буфера. Когда редактор
              находится в режиме ввода, никакие команды не  восприни-
              маются; вводимая информация только накапливается. Стро-
              ка,  состоящая  из одного символа ".", обозначает конец
              ввода.

              Редактор  ed поддерживает ограниченную форму записи ре-
              гулярных выражений; регулярное  выражение  используется
              для задания адресов строк и, в некоторых командах (нап-
              ример, s) для указания заменяемых фрагментов строк. Ре-
              гулярное  выражение  (РВ)  определяет множество цепочек
              символов. Говорят, что элемент множества цепочек  удов-
              летворяет  РВ. РВ для ed может быть построено следующим
              образом.

              Следующие  односимвольные РВ сопоставляются с цепочками
              из одного символа:

              1.1  Обычный  символ  (не входящий в перечень из пункта
                   1.2, см. ниже) - это  односимвольное  РВ,  которое
                   успешно сопоставляется с указанным символом.

              1.2  Если  за символом \ следует любой специальный сим-
                   вол, то этот  последний  теряет  свой  специальный
                   смысл. Данная комбинация определяет односимвольное
                   РВ,  успешно  сопоставляющееся со специальным сим-
                   волом. Специальными символами являются:

                   .  *  [  \
                      Эти символы имеют специальный смысл, за  исклю-
                      чением случая, когда они заключены в квадратные
                      скобки (см ниже 1.4).

                   ^  Символ имеет специальный смысл в  начале  всего
                      РВ (см. ниже 3.1) или в квадратных скобках сра-
                      зу после открывающей скобки (см. 1.4).

                   $  Символ имеет специальный смысл в конце всего РВ
                      (см. ниже 3.2).

                   разделители РВ
                      Символы, использующиеся для ограничения (разде-
                      лители)  целого  РВ,  являются специальными для
                      этого РВ (например, символ / в команде g).

              1.3  Точка (.) - односимвольное РВ, успешно сопоставля-
                   ющееся с любым символом, кроме перевода строки.

              1.4  Непустая  цепочка символов, заключенная в квадрат-
                   ные скобки [ ] - односимвольное РВ, которое успеш-
                   но сопоставляется с любым символом из этой  цепоч-
                   ки. Если цепочка начинается с символа ^, то РВ ус-
                   пешно сопоставляется с любым символом, не входящим
                   в  этот  набор  и отличающимся от перевода строки.
                   Если символ ^ располагается не в  начале  цепочки,
                   он  теряет свой специальный смысл. Диапазон симво-
                   лов можно задать с помощью знака -.  Например,  РВ
                   [0-9] эквивалентно [0123456789]. Минус теряет свой
                   специальный  смысл,  если  он стоит в начале (быть
                   может, после ^) или в конце цепочки символов. Зак-
                   рывающая квадратная скобка не рассматривается  как
                   окончание цепочки символов, если она стоит в нача-
                   ле  (быть  может,  после ^). Таким   образом,   РВ
                   [  ]a-f]  определяет  либо  закрывающую квадратную
                   скобку, либо любой символ от a до f  включительно.
                   Внутри  квадратных скобок символы, перечисленные в
                   1.2, теряют свой специальный смысл.

              Для  построения  РВ из односимвольных РВ могут быть ис-
              пользованы следующие правила:

              2.1  Односимвольное РВ есть РВ, успешно сопоставляющее-
                   ся по правилам, описанным выше.

              2.2  Односимвольное РВ с последующим  символом  *  есть
                   РВ,  успешно сопоставляющееся с любым (в том числе
                   и нулевым) числом  вхождений  односимвольного  РВ.
                   При  наличии  альтернатив выбирается самая длинная
                   из начинающихся как можно левее успешно  сопостав-
                   ленных цепочек символов.

              2.3  Односимвольное  РВ,  после которого следуют конст-
                   рукции \{m\}, \{m,\} или \{m,n\}, есть РВ, успешно
                   сопоставляющееся с определенным  числом  вхождений
                   односимвольного РВ. Значения m и n должны быть не-
                   отрицательными целыми, меньшими 256; \{m\} означа-
                   ет  ровно  m вхождений; \{m,\} - по крайней мере m
                   вхождений; \{m,n\} - любое число вхождений от m до
                   n включительно.

              2.4  Конкатенация нескольких РВ есть РВ, которое успеш-
                   но сопоставляется с конкатенацией  цепочек  симво-
                   лов,  каждая из которых успешно сопоставлена с от-
                   дельным РВ.

              2.5  РВ, заключенное между конструкциями \( и \),  есть
                   РВ,  которое  успешно сопоставляется с теми же це-
                   почками символов, что и исходное.

              2.6  Выражение \n успешно сопоставляется с той  же  це-
                   почкой символов, что и (под)выражение, заключенное
                   в  экранированные  скобки \( и \), и расположенное
                   ранее в том же РВ. Здесь n - это цифра; соответст-
                   вующее подвыражение начинается  с  n-го  вхождения
                   конструкции   \(   в   РВ.   Например,   выражение
                   ^\(.*\)\1$  успешно  сопоставляется  со  строками,
                   состоящими из двух одинаковых цепочек символов.

              Наконец, на РВ можно наложить ограничение, чтобы сопос-
              тавленная цепочка символов примыкала к одному или обоим
              концам строки:

              3.1  Если  перед  РВ  стоит  символ ^, то сопоставление
                   должно выполняться с начала строки.

              3.2  Если после РВ стоит  символ  $,  то  сопоставление
                   должно выполняться до конца строки.

              Конструкция ^РВ$ задает шаблон целой строки.

              Пустое  РВ  (//)  эквивалентно последнему обработанному
              РВ.

              Для понимания механизма адресации в редакторе ed следу-
              ет  знать, что в каждый момент времени существует теку-
              щая строка. Вообще говоря, текущей  является  последняя
              из  строк,  обработанных какой-либо командой. Подробнее
              вопрос о текущей строке обсуждается при описании каждой
              команды. Адреса строятся по следующим правилам:

              1.   Символ . обозначает текущую строку.

              2.   Символ $ обозначает последнюю строку буфера.

              3.   Десятичное число n обозначает n-ую строку буфера.

              4.   Пара символов 'x адресует строку, помеченную  мар-
                   кером  x. Маркер - это малая буква, ставится с по-
                   мощью команды k (см. ниже).

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

              6.   Конструкция  ?РВ?  аналогична  предыдущей,  только
                   просмотр выполняется в обратном направлении, начи-
                   ная со строки, расположенной перед текущей.

              7.   Если за адресом следует знак + или -, и далее сто-
                   ит десятичное число, то адрес  увеличивается  (или
                   уменьшается) на указанное число строк. Знак + мож-
                   но опускать.

              8.   Если  адрес начинается с + или -, то смещение про-
                   изводится относительно текущей строки; так,  адрес
                   -5 эквивалентен .-5.

              9.   Если адрес оканчивается на + или -,  то  к  адресу
                   прибавляется (из него вычитается) 1. Согласно это-
                   му  и  предыдущему правилу адрес из одного символа
                   - соответствует  строке, расположенной перед теку-
                   щей. (В более ранних версиях редактора ту же  роль
                   играл  символ  ^).  Более того, последовательности
                   знаков + или - в конце  адреса  обладают  эффектом
                   накопления.  Так,  -- соответствует адресу текущей
                   строки, уменьшенному на 2.

              10.  Запятая обозначает пару адресов 1,$, а точка с за-
                   пятой - пару адресов .,$.

              Команды могут требовать ноль, один или два адреса.  Ад-
              реса  указываются  перед командами. Задание адресов для
              команды, их не требующей, считается ошибкой. Если зада-
              но меньше адресов, чем нужно, используются подразумева-
              емые значения. Если адресов больше, чем нужно,  исполь-
              зуются последние.

              Обычно адреса отделяются друг от друга запятой.  Адреса
              могут разделяться и точкой с запятой. В этом случае те-
              кущая  строка  (.)  становится первым адресом, и только
              тогда вычисляется второй, что  можно  использовать  при
              поиске  вперед и назад (см. выше правила 5 и 6). Второй
              адрес всегда должен быть больше первого (в соответствии
              с нумерацией строк буфера).

              В следующем ниже списке команд редактора ed  в  скобках
              указаны подразумеваемые адреса. Разумеется, сами скобки
              не являются частью адреса.

              Обычно  недопустимо  появление  более  одной  команды в
              строке. Однако некоторые команды (такие как e, f, r или
              w) могут употребляться с суффиксами l, n или p. В  этом
              случае  текущая  строка распечатывается или нумеруется.
              Далее эти команды будут обсуждены.

              (.)a
              текст
              .
                   Команда добавления читает данный текст и вставляет
                   его  после  адресуемой  строки. Текущей становится
                   последняя из вставленных  строк  или,  если  такой
                   нет,  адресуемая  строка.  Адрес 0 в данном случае
                   является корректным и обозначает вставку в  начало
                   буфера. Длина строк текста не должна превышать 256
                   (включая символ перевода строки).

              (.)c
              текст
              .
                   Команда изменения уничтожает адресуемые  строки  и
                   вместо  них  вставляет  текст.  Текущей становится
                   последняя из вставленных  строк  или,  если  такой
                   нет, первая неудаленная строка.

              (.,.)d  
                   Команда  удаления  уничтожает  в буфере адресуемые
                   строки. Текущей становится  строка,  следующая  за
                   последней  удаленной.  Если уничтожаются строки до
                   конца буфера, то текущей становится  последняя  из
                   оставшихся строк.

              e файл
                   Эта команда уничтожает текущее содержимое буфера и
                   читает новое содержимое из указанного файла. Теку-
                   щей  становится последняя прочитанная строка. Если
                   имя файла не указано, то используется текущее  имя
                   файла (см. команду f). Количество прочитанных сим-
                   волов  выводится на экран. Файл становится текущим
                   и может использоваться в последующих командах e, r
                   и w в качестве подразумеваемого. Если вместо файла
                   указан символ !,  остаток  строки  рассматривается
                   как  команда  shell'а  [см.  sh(1)], вывод которой
                   размещается в буфере редактора. Такая  команда  не
                   изменяет текущее имя файла.

              E файл
                   Эта команда аналогична команде e,  за  исключением
                   того, что не производится проверки изменения буфе-
                   ра после последней команды w.

              f файл
                   Если  файл задан, он становится текущим, иначе вы-
                   дается текущее имя файла.

              (1,$)g/РВ/список_команд
                   При выполнении  этой  глобальной  команды  сначала
                   ищутся строки, соответствующие РВ. Затем каждая из
                   найденных  строк  по  очереди становится текущей и
                   для нее выполняется заданный список_команд. Первая
                   команда из списка должна располагаться на  той  же
                   строке,  что  и  g;  все  строки, кроме последней,
                   должны завершаться  символом  \.  В  списке  могут
                   встречаться  команды  a, c, i и соответствующий им
                   текст. Точка, завершающая режим ввода, в последней
                   строке списка_команд может  быть  опущена.  Пустой
                   список_команд эквивалентен команде p. В списке_ко-
                   манд не могут встречаться команды g, G, v и V.

              (1,$)G/РВ/
                   При выполнении  интерактивной  глобальной  команды
                   сначала  ищутся  строки, соответствующие РВ. Затем
                   каждая из найденных строк  по  очереди  становится
                   текущей, выводится на экран и для нее можно выпол-
                   нить  одну  команду, отличную от a, c, i, g, G, v,
                   V. Перевод строки рассматривается как  пустая  ко-
                   манда.  Символ  &  обозначает повторение последней
                   непустой команды, выполненной в  G.  Заметим,  что
                   команды  при  выполнении  G могут адресовать любую
                   строку буфера. Команда G может быть прервана нажа-
                   тием клавиши прерывания.

              h    Справочная команда выдает краткое сообщение о пос-
                   ледней ошибке после ?-диагностики.

              H    Эта команда переключает режим вывода сообщений  об
                   ошибках. Первоначально сообщения отключены.

              (.)i
              текст
              .
                   Команда вставки аналогична команде  добавления  a,
                   только  вставка производится перед указанной стро-
                   кой и адрес 0 недопустим.

              (.,.+1)j
                   Команда об единения  соединяет  последовательность
                   строк в одну, удаляя промежуточные символы перево-
                   да  строки.  Если задан только один адрес, команда
                   ничего не делает.

              (.)kx
                   Команда присваивает указанной строке имя x,  кото-
                   рое  должно  состоять  из одной малой буквы. После
                   этого данная строка может быть адресована как  'x.
                   Текущая строка остается прежней.

              (.,.)l
                   Адресуемые строки распечатываются следующим  обра-
                   зом: некоторые непечатные символы (такие как табу-
                   ляция  или символ забоя) выводятся в соответствую-
                   щей мнемонике, остальные непечатные символы  печа-
                   таются  в восьмеричном виде. Длинные строки разре-
                   заются. Команду l можно добавить в  качестве  суф-
                   фикса к любой другой команде, кроме e, f, r и w.

              (.,.)ma
                   Команда  перемещает  адресуемые строки и вставляет
                   их после строки с адресом a. Если на месте a задан
                   0, строки перемещаются в начало буфера. Адрес a не
                   должен попадать в диапазон перемещаемых строк. Те-
                   кущей становится  последняя  перемещенная  строка.
                   Отметим,  что только команды m и t (см. ниже) тре-
                   буют трех адресов,  один  из  которых  указывается
                   после команды.

              (.,.)n
                   Распечатывает  адресуемые строки, располагая перед
                   ними номер и символ табуляции. Текущей  становится
                   последняя  распечатанная  строка.  Команду n можно
                   добавить в качестве суффикса к любой другой коман-
                   де, кроме e, f, r и w.

              (.,.)p
                   Распечатывает  адресуемые строки, последняя из ко-
                   торых становится текущей. Команду p можно добавить
                   в качестве суффикса к любой другой команде,  кроме
                   e,  f,  r и w. Например, команда dp удалит текущую
                   строку и выведет новую текущую строку.

              P    Включить/выключить приглашение * перед  следующими
                   командами. Первоначально приглашение отсутствует.

              q    Команда выхода из редактора. Автоматической записи
                   в файл не происходит (см. ДИАГНОСТИКУ).

              Q    Выход из редактора без проверки  изменения  буфера
                   после последней команды w.

              ($)r файл
                   Указанный файл прочитывается и располагается после
                   адресованной  строки.  Если имя файла отсутствует,
                   то используется текущее имя файла (см. команды e и
                   f). Команда r не изменяет текущее имя файла, кроме
                   того случая, когда имя файла еще  не  установлено.
                   Адрес 0 допустим, в этом случае  прочитанный  файл
                   располагается  в начале буфера. Если чтение прошло
                   успешно, то распечатывается количество прочитанных
                   символов. Текущей становится последняя прочитанная
                   строка. Если вместо файла указан символ !, остаток
                   строки рассматривается как  команда  shell'а  [см.
                   sh(1)], вывод которой вставляется в буфер редакто-
                   ра. Например, команда $r !ls вставит список файлов
                   текущего  каталога  в  конец редактируемого файла.
                   Подобная команда не изменяет текущее имя файла.

              (.,.)s/РВ/заменяющая_цепочка/         или
              (.,.)s/РВ/заменяющая_цепочка/g       или
              (.,.)s/РВ/заменяющая_цепочка/n       n = 1 - 512
                   Команда замены производит поиск по шаблону в  ука-
                   занном диапазоне адресов. Для каждой строки, удов-
                   летворяющей  шаблону,  выполняется  замена успешно
                   сопоставленных не перекрывающихся цепочек символов
                   на заменяющую_цепочку: всех, если используется ин-
                   дикатор глобальной замены g, n первых, если указа-
                   но число, и только первой в противном случае.  При
                   отсутствии успешных сопоставлений выдается сообще-
                   ние  об ошибке. Текущей становится последняя стро-
                   ка, в которой была произведена замена. Любой  сим-
                   вол,  отличный от пробела и перевода строки, может
                   быть использован вместо / в  качестве  разделителя
                   РВ и заменяющей_цепочки.

                   Символ &, входящий в заменяющую_цепочку, заменяет-
                   ся на цепочку, сопоставленную с РВ в текущей стро-
                   ке. Специальное значение символа & можно отменить,
                   используя \. Имеется и  более  общая  возможность:
                   конструкция  \n,  где n - цифра, заменяется на це-
                   почку, сопоставленную в текущей строке с РВ,  зак-
                   люченным  между n-й открывающей скобкой \( и соот-
                   ветствующей закрывающей скобкой \). Если  заменяю-
                   щая_цепочка  состоит  из  одного символа %, то под
                   этим подразумевается заменяющая_цепочка, использо-
                   ванная в предыдущей команде замены. Символ % теря-
                   ет специальное значение, если в заменяющей_цепочке
                   он не один, или если перед ним стоит символ \.

                   Строку можно разрезать, вставив в нее символ пере-
                   вода  строки. В заменяющей_цепочке переводу строки
                   должен предшествовать символ \.  Такая  замена  не
                   допускается в рамках команд g и v.

              (.,.)ta
                   Эта команда аналогична команде m, только выполняет
                   не перемещение, а копирование адресуемых  строк  и
                   вставку их после строки с адресом a (который может
                   равняться  0). Текущей становится последняя строка
                   копии.

              u    Отмена  (откатка) последнего изменения содержимого
                   буфера, вызванного командами a, c, d, g, i, j,  m,
                   r, s, t, v, G или V.

              (1,$)v/РВ/список_команд
                   Эта  команда аналогична глобальной команде g и от-
                   личается лишь тем, что  список_команд  выполняется
                   только для строк, не удовлетворяющих РВ.

              (1,$)V/РВ/
                   Эта команда  аналогична  интерактивной  глобальной
                   команде  G  и  отличается  лишь тем, что на первом
                   этапе ищутся строки, не удовлетворяющие РВ.

              (1,$)w файл
                   Команда записи адресуемых строк в указанный  файл.
                   Если файл не существует, то он создается с режимом
                   доступа  666  (доступен  всем на чтение и запись),
                   если только маска создания файлов  [см.  umask(1)]
                   не изменяет этот режим. Текущее имя файла не изме-
                   няется, если до этого оно было каким-либо способом
                   установлено. Если файл не указан, используется те-
                   кущее имя файла (см. команды e и f). Текущей оста-
                   ется  прежняя строка. Если команда завершается ус-
                   пешно, выводится количество  записанных  символов.
                   Если  вместо файла указан символ !, остаток строки
                   рассматривается как команда shell'а  [см.  sh(1)],
                   стандартным  вводом  которой  являются  адресуемые
                   строки. Подобная команда не изменяет  текущее  имя
                   файла.

              ($)= Распечатывается  номер  адресуемой строки. Текущей
                   остается прежняя строка.

              !команда
                   Строка после ! рассматривается как команда shell'а
                   [см.  sh(1)]. Если в этой строке встречается неэк-
                   ранированный символ %, он  заменяется  на  текущее
                   имя  файла. Если символ ! является первым символом
                   команды, он заменяется текстом предыдущей команды.
                   Так, комбинация !! приведет к повторному  выполне-
                   нию  предыдущей команды. Если в команду производи-
                   лась любая из двух перечисленных подстановок, рас-
                   печатывается окончательный текст команды.  Текущей
                   остается прежняя строка.

              (.+1)перевод_строки
                   "Команда",  состоящая  только  из адреса, вызывает
                   печать адресуемой строки, которая становится теку-
                   щей. Пустая команда, состоящая только  из  символа
                   перевода  строки,  эквивалентна  конструкции .+1p;
                   она полезна для продвижения по буферу.

              Если нажата клавиша прерывания, редактор ed выдает  со-
              общение об ошибке ? и переходит в свой командный режим.

              Некоторые ограничения на размеры: не более 512 символов
              в строке, не более 256  символов  в  списке_команд  при
              глобальных  действиях  и  не более 64 символов в именах
              файлов. Ограничение на количество строк зависит от раз-
              меров доступной памяти; каждая строка требует  дополни-
              тельно 1 (полу)слово.

              При чтении файла ed отбрасывает нулевые байты.

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

              Если  завершающий разделитель для РВ или заменяющей_це-
              почки непосредственно предшествует переводу строки,  то
              такой разделитель может быть опущен. В этом случае рас-
              печатывается  содержимое  адресуемой  строки. Следующие
              пары команд эквивалентны:

                   s/s1/s2            s/s1/s2/p
                   g/s1               g/s1/p
                   ?s1                ?s1?

      ФАЙЛЫ
              /usr/tmp  Подразумеваемый каталог для хранения  времен-
                        ных файлов.
              $TMPDIR   Каталог, используемый вместо  /usr/tmp,  если
                        переменная окружения TMPDIR существует и име-
                        ет непустое значение.
              ed.hup    В этом файле  сохраняется  рабочий  файл  при
                        внезапном освобождении терминальной линии.

      СМ. ТАКЖЕ
              edit(1),  egrep(1),  ex(1),  fgrep(1), grep(1), red(1),
              sed(1), stty(1), umask(1), vi(1).
              fspec(4), regexp(5) в Справочнике программиста.

      ДИАГНОСТИКА
              ?      При обнаружении ошибки в команде.

              ?файл  Если файл недоступен.

              Чтобы получить  более подробные диагностические сообще-
              ния, следует пользоваться командами h и H.

              Если, при наличии несохраненных изменений, делается по-
              пытка разрушить содержимое буфера командой e или q,  ed
              выдает предупреждение (?) и позволяет продолжить редак-
              тирование.  В этот момент повторная команда e или q во-
              зымеет действие. Опция  командной  строки  -s  отменяет
              проверку наличия изменений.

      СЮРПРИЗЫ
              Команда ! не должна появляться в списке_команд g и v.

              Последовательность \n в РВ не рассматривается как  сим-
              вол перевода строки.

              Если стандартный ввод редактора назначен не  на  терми-
              нал, ed завершится после первой же ошибки.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк