Ответ 1
Чтобы заменить "синий" на "зеленый" в строках, содержащих "красный":
:g/red/s/blue/green
Сделать замену в строках, которые не содержат "красный":
:g!/red/s/blue/green
Скажем, у меня есть текст, содержащий слова red
и blue
.
Как заменить вхождения слова blue
словом green
только во всех строках, содержащих слово red
?
Аналогично, как заменить blue
на green
во всех строках, не содержащих слова red
?
Чтобы заменить "синий" на "зеленый" в строках, содержащих "красный":
:g/red/s/blue/green
Сделать замену в строках, которые не содержат "красный":
:g!/red/s/blue/green
Как и в sed, вы можете использовать шаблон для адресов, на которых будет работать. Например, учитывая следующий файл:
foo bar
bar
foo bar baz
bar baz
quux bar
Вы выполните команду, например следующую:
:g/^foo/s/bar/foobarbaz/g
Это позволит Vim применить соответствие шаблонов только к каждой строке, начинающейся с "foo", и выполнить замену на несколько совпадений в каждой соответствующей строке. Таким образом, хотя "бар" появляется на нескольких строках, с этим вызовом вы получите следующий результат:
foo foobarbaz
bar
foo foobarbaz baz
bar baz
quux bar
Обратите внимание, что только строки, начинающиеся с "foo" в начале строки, будут совпадать, поэтому строки с "баром" на других линиях остаются нетронутыми.