Заменить не первое вхождение шаблона в строке

и другие vi-подобные редакторы

Модератор: /dev/random

V112
Сообщения: 8

Заменить не первое вхождение шаблона в строке

Сообщение V112 »

:s/{шаблон}/{строка}/ заменяет {шаблон} на {строку} и заменает первое вхождение.

:s/{шаблон}/{строка}/g заменяет все вхождение шаблона в строке.

:s/{шаблон}/{строка}/2 заменяет первое вхождение шаблона в двух строках.

Какую команду использовать, для того чтоб заменить второе вхождение шаблона в строке?
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Заменить не первое вхождение шаблона в строке

Сообщение drBatty »

V112
ну это же не sed…

Код: Выделить всё

:!sed 's/.../.../2' %
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

V112
Сообщения: 8

Re: Заменить не первое вхождение шаблона в строке

Сообщение V112 »

Vim для такого не предназначен?

Мне не нравятся подобные отличия синтаксиса Vim и Sed.

И для изменения файла используется такая команда:

Код:

:%!sed 's/{шаблон}/{строка}/2'


Каманда (sed) применаяется для заданного диапазона (%).
Если диапазон не указать, то команда выполниться без изменения файла.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Заменить не первое вхождение шаблона в строке

Сообщение drBatty »

V112 писал(а):
28.02.2014 21:02
Мне не нравятся подобные отличия синтаксиса Vim и Sed.

sed это Тьюринг-полный язык программирования. Там свой синтаксис. Vim это текстовый редактор, и его команда s в общем-то никакого отношения к s из sed не имеет.
V112 писал(а):
28.02.2014 21:02
для заданного диапазона (%).
Если диапазон не указать, то команда выполниться без изменения файла.

я использовал % в другом смысле и контексте. Так тоже можно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

V112
Сообщения: 8

Re: Заменить не первое вхождение шаблона в строке

Сообщение V112 »

drBatty писал(а):
28.02.2014 08:26

Код:

:!sed 's/.../.../2' %


Это выведет, обработанный sed, файл (%), но сам буфер Vim модифицирован не будет.

Для изменения файла, нужна такая команда:

Код:

:!sed -i 's/{шаблон}/{строка}/2' %


% - имя файла, открытого в буфере Vim.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Заменить не первое вхождение шаблона в строке

Сообщение drBatty »

V112 писал(а):
01.03.2014 04:03
Для изменения файла, нужна такая команда

я в курсе. Откуда мне знать, чего вы хотите? Моя команда ничего не делает, и нужна для демонстрации.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

V112
Сообщения: 8

Re: Заменить не первое вхождение шаблона в строке

Сообщение V112 »

Вообще я хотел узнать: можно ли, только средствами Vim заменить один шаблон на другой (если этот шаблон встречается в строке несколько раз).
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4762
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Заменить не первое вхождение шаблона в строке

Сообщение SLEDopit »

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: