n
-ю строку, дав команду np
или просто номер n
, и строки с m
по n
, используя m,np
. "Номером строки" $
обозначается последняя строка, так что строки можно не считать.1
Печатать первую строку; 1р
то же самое $
Печатать последнюю строку; $p
то же самое 1,$p
Печатать строки с первой по последнюю
Печатать файл по одной строке проще всего; нажимая клавишу
RETURN
, вы можете вернуться на одну строку назад с помощью '-
'. Можно комбинировать номера строк с '+
' и '-
'.$-2,$p
Печатать последние три строки 1,2+3p
Печатать строки с первой по пятую
Однако нельзя печатать после конца файла или в обратном порядке; команды типа
$,$+1p
и $,1p
считаются незаконными.Команда
list 1
выводит текст в формате с видимыми символами. Это удобно при поиске в файлах управляющих символов, при различении пробелов, табуляции и т.п. (см. vis
в гл. 7).ОбразцыКак только размер начинает превышать две строки, становится неудобным печатать его весь целиком, чтобы отыскать нужную строку. Редактор
ed
предлагает способ поиска строк, совпадающих с некоторым образцом, шаблоном: /pattern/
обнаруживает очередное вхождение pattern
.$ ed poem 263
/flea/
Ищет очередную строку, содержащую fleaGreat fleas have little fleas
/flea/
Ищет еще однуAnd little fleas have lesser fleas,
//
Ищет следующую по тому же образцуAnd the great fleas themselves, in turn,
??
Поиск в обратном направлении по тому же образцуAnd little fleas have lesser fleas,
Редактор запоминает образец, применявшийся вами в последний раз, так что можно повторить поиск просто с помощью
//
. Для поиска в обратном направлении воспользуйтесь ?pattern?
и ??
.Поиск с помощью
/.../
и ?...?
циклический, т.е. продолжается в обратном направлении после достижения одного из концов текста:$p
Печатать последнюю строку ('p' необязательна)and greater still, and so on.
/flea/
Следующее flea вблизи началаGreat fleas have little fleas
??
От начала идет в обратном направлении have greater fleas to go on;
Результатом поиска по образцу типа
/flea/
является номер строки, например 1 или $
, который может использоваться в том же контексте, что и такие номера:1,/flea/p
Печатать от единицы до следующего flea
?flea?+1,$p
Печатать от предыдущего flea + 1
до конца
Текущая редактируемая строка. Редактор
ed
отслеживает последнюю строку, с которой имели дело: печатали или вводили текст, читали из файла. Это текущая строка с именем '.
'. Каждая команда определенным образом влияет на текущую строку, обычно настраивая ее на ту, с которой она последний раз работала. Вы можете использовать текущую строку так же, как $
или номер строки типа 1:$ ed poem
263
.
Печатает текущую строку; после чтения файлаэто то же, что $
and greater still, and so on.
.-1,.p
Печатает предыдущую строку и еще однуWhile these again have greater still,
and greater still, and so on.
Выражения для номера строки могут быть сокращены:
Сокращение Эквивалент Сокращение Эквивалент -1
.-1
+
.+1
--
или -2
.-2
++
или +2
.+2
-n
.-n
+n
.+n
$-
$-1
.3
.+3
Добавление, замена, исключение, вставкаКоманда
а
(добавить) добавляет строки после определенной строки, команда d
(удалить) вычеркивает строки, команда i
(вставить) вставляет строки перед определенной строкой, команда с
(заменить) заменяет строки, действуя как комбинация команд "удалить" и "вставить".na
Добавить текст после строки n
ni
Вставить текст перед строкой n
m,nd
Удалить строки с m
по n
m,nc
Заменить строки с m
по n
Если номера строк не указаны, используется текущая строка. Новый текст для команд
а
, с
и i
оканчивается строкой '.
'; точка, введенная в последней строке, оставляется. Текущая строка настраивается на следующую строку после последней удаленной, за исключением случая, когда удалена последняя строка, т.е. $
.0а
Добавить текст в начало (то же, что 1i
) dp
Удалить текущую строку, печатать следующую (или последнюю, если $
) .,$dp
Удалить отсюда до конца, печатать новую последнюю 1,$d
Удалить все ?pat?,.-1d
Удалить от предыдущей, совпадающей с 'pat
' до той, что перед текущей $dp
Удалить последнюю строку, печатать новую последнюю $c
Заменить последнюю строку ($а добавляет после последней строки) 1,$c
Заменить все строки
Подстановка, аннулированиеНет необходимости перепечатывать целую строку, если в ней нужно заменить лишь несколько символов. Команда подстановки
s
заменяет одну последовательность символов другой:s/old/new/
Заменить первую old
на new
в текущей строке s/old/new/p
Заменить первую old
на new
и печатать строку s/old/new/g
Заменить каждую old
на new
в текущей строке s/old/new/gp
Заменить каждую old
на new
и печатать строку
Заменяется только самое левое вхождение образца в строке, если не написана буква '
g
'. Команда s
выводит измененную строку только в том случае, когда она ока