Команда замены "s"
предназначена для изменения
отдельных слов или символов в
пределах одной строки или группы
строк.
Общий формат команды:
[n[, k]]s/x/y/[команда]<CR>
где x - группа символов или слов в
строке, которые надо заменить
(старый текст);
y - группа символов или слов, которые
заменяют старое значение,
указанное как "x" (новый текст);
n, k - номера начальной и конечной
строк буфера, в пределах которых
осуществляется замена;
/команда - одна из следующих 4-х
команд:
g - заменить каждое появление группы
символов (x) в каждой указанной
строке;
l - отобразить последнюю строку
замененного текста, включая
непечатаемые символы;
n - отобразить последнюю строку
замененного текста, вместе с
номерами строк;
p - отобразить последнюю строку
замененного текста.
Если номера строк не указаны,
замена осуществляется в текущей
строке.
Если указан номер только одной
строки, то замена производится
только в одной строке.
Для реализации замены в группе
строк надо указать номера
начальной (n) и конечной (k) строк, в
пределах которых надо произвести
замену.
При выполнении данной команды
редактор просматривает строки,
начиная с номера "n" и кончая
номером "k" включительно. При
обнаружении в какой-либо из них
искомой группы "x" редактор
заменяет ее на "y".
Редактор не печатает результат
замены автоматически, поэтому для
контроля рекомендуется вместе с
командой замены задавать команду
печати.
Если в командной строке указаны
"n" и "k" и команда печати,
то печатается только последняя
измененная строка.
Текущей строкой после выполнения
команды замены остается последняя
строка, в которой произведена
замена части текста.
Пример.
1, $s/a/a2/p
замена символа "a" на "a2"
производится в строках с 1-й по
последнюю. Текущей станет
последняя строка, она будет
распечатана.
Используя команду "s", можно
удалить группу символов (или один
символ) в строке. Для этого команда
замены должна быть задана
следующим образом:
s/x//
что фактически означает: заменить
группу символов в текущей строке на
"пусто", т.е. просто удалить
заданные символы из строки.
Команда "s" заменяет лишь
первую найденную искомую группу
символов в строке. Если же надо
заменить все случаи появления
заданной комбинации символов в
строке, используется команда
"g":
s/x/y/g
Примеры.
s/c/d/gp
все появления символа "c" в
текущей строке заменить символом
"d" и распечатать строку;
1, $s/c/d/gp
замена всех символов "c" на
символ "d" во всем буфере с
печатью последней измененной
строки.
В следующем примере содержится
ошибка ввода. Пока строка,
содержащая ошибку является
текущей, произведите корректировку
в ней. Старый текст: "ai" в слове
"airor", новый текст - "er".
Экран выглядит следующим образом:
Пример.
a<CR>
In the beginning, I made an airor.<CR>
.<CR>
.p<CR>
In the beginning, I made an airor.<CR>
s/ai/er/<CR>
Обратите внимание, что ed не дает
ответа на команду замены. Чтобы
проверить, что команда выполнилась
успешно, выполните команду "p"
или "n" как часть командной
строки замены. .lin В следующем
примере команда "n"
используется для проверки того, что
слово "file" заменит слово
"toad".
Пример.
.p<CR>
This is a last toad
s/toad/file/n<CR>
1 This is a last file
Чтобы заменить текст в строке,
отличной от текущей, укажите номер
строки.
Например, на следующем экране
командная строка включает номер
строки, которая будет изменена
(строка 1), т.к. текущей является
строка 3.
Пример.
1, 3p<CR>
This is a past toad
testing testing
come in toad
.<CR>
come in toad
1s/past/test<CR>
This is a test toad
Как вы видите, ed напечатал
последнюю строку автоматически
после изменения, т.к. последний
ограничитель опущен.
Наиболее универсальным средством
ed является глобальная замена.
Поместив команду "g" после
последнего ограничителя в
командной строке замены, вы сможете
заменить каждое появление шаблона
в каждой указанной строке. Заменим
строку "es" на "ES":
u<CR>
1, $p<CR>
This is a last toad
testing testing
come in toad
testing 1, 2, 3
1, $s/es/ES/g<CR>
This is a last toad
tESting tESting
come in toad
tESting 1, 2, 3
Другой способ - это использование
глобального шаблона для поиска
вместо указания границ строк:
u<CR>
1, $p<CR>
This is a test toad
testing testing
come in toad
testing 1, 2, 3
g/test/s/es/ES/g<CR>
1, 3p<CR>
This is a tESt toad
tESting tESting
come in toad
tESting 1, 2, 3
Рассмотрим следующие шаблоны:
/шаблон<CR>
?шаблон<CR>
v/шаблон<CR>
В следующем примере формат поиска
v/шаблон используется для
нахождения строк, которые не
содержат шаблон "testing". Затем
команда "s" используется для
замены шаблона "in" на шаблон
"out" в этих строках:
v/testing/s/in/out<CR>
This is a test toad
come out toad
|