6.10. Команда замены (s)
Команда замены "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
Назад | Содержание | Вперед