Третий тип команд редактора ed – команды, которые используют два адреса:
.,.с (change) – изменить. Команда change вначале удаляет указанные строки, переходит в режим ввода, затем в интерактивном режиме новый текст разместится на месте удаленных строк. Подобно командам insert и append команда change переводит редактор в режим ввода.
.,.ma (move) – переместить указанные строки в позицию, задаваемую параметром а ($ – в конец файла, 0 – в начало файла, числовой номер строки). Здесь указываются строки, являющиеся источником и приемником. После перемещения значение точки устанавливается в новый адрес последней перемещенной строки. Значение адреса перемещения имеет важное ограничение: он не должен попадать в диапазон перемещаемых строк. Поэтому команда 1,4m3 не допускается. Перемещение эквивалентно удалению с последующим добавлением текста.
.,.tа (transfer) – переслать копию указанных строк по адресу а. Если команда move выбирает текст из одного места и помещает его в другое, то команда transfer создает копию заданного в ней текста и помещает ее после приемника. Следовательно, команда move не оказывает влияния на размер файла, а команда transfer увеличивает его. Значение адреса копирования имеет важное ограничение: он не должен попадать в диапазон копируемых строк, поэтому команда 2,5t3 – не допускается. Значение точки устанавливается в новый адрес последней скопированной строки.
.,.d (delete) – удалить из рабочей копии файла указанные строки. При удалении строк нужно быть очень осторожным, потому что можно удалить строки ошибочно.
u ( undo ) – отмена изменения, которая служит для отмены действия предыдущей команды.
.,.l (list) – команда l очень напоминает команду p, при этом:
- распечатываются все управляющие символы (символы табуляции, возврата каретки, признаки конца печати строки), которые при обычной печати строки не выводятся;
- строки, которые не помещаются на экране, усекаются и выводятся как несколько строк.
Например,
\b – возврат на символ,
\t – табуляция.
Почему было бы полезно увидеть на экране дисплея эти коды? Потому, что редактор ed и система UNIX рассматривают их, как и другие символы, хотя они и не появляются на экране. Если случайно набрать один из этих управляющих символов в середине команды, система не сможет распознать команду.
.,.j (join) – объединить две или более последовательных строк в одну. Строка, полученная путем объединения, не может быть длиннее установленного предела, обычно равного 256 символам. Несмотря на то, что для объединения строк существует отдельная команда, для их разбивки требуется лишь вставить в нужное место символ возврата каретки, при этом нельзя забывать ставить обратную косую черту перед символом возврата каретки. Команда j интерпретируется по умолчанию как .,.+1j и объединяет текущую строку со следующей строкой. Текущей строкой (значение точки) становится новая объединенная строка. Следующие строки (если они есть) будут перенумерованы.
.,.s/tx/text/ (substitute) – подставить вместо последовательности символов tx на последовательность text в указанных строках.
.,.g (global) – используется для модификации других команд с тем, чтобы их действие распространялось на все строки, содержащие определенный текстовый образ. Эта команда выполняется в два этапа. На первом соответствующая программа просматривает весь текст и составляет список строк, содержащих заданный текстовый образ, а на втором ко всем этим строкам применяется команда, следующая за текстовым образом.
.,.v – по своему действию обратная команде «g» . При обработке «v» текст просматривается и составляется список строк, не включающих указанный текстовый образ. Далее, как и при выполнении «g», к строкам из списка применяется команда, следующая за текстовым образом.
1,$w – указанные в команде строки переписать в существующую копию файла.
В командах придерживаются следующих обозначений:
1 – первая строка;
$ – последняя строка, или конец строки, если он используется между двумя косыми чертами в цепочке при организации поиска;
. – текущая строка;
^ – начало строки.
По терминологии системы UNIX знаки ^ и $ называются якорями текста.