Unix Man (Справочное руководство)


ED(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 следует знать, что в каждый момент времени существует текущая строка. Вообще говоря, текущей является последняя из строк, обработанных какой-либо командой. Подробнее вопрос о текущей строке обсуждается при описании каждой команды. Адреса строятся по следующим правилам:




    Начало  Назад  Вперед