Как заменить шаблон в скобках с помощью редактора Vim

Имея файл с двумя полями, разделенными :(двоеточие), как показано ниже:

Ram:con_[3:4]_aen[52:7]
Rakesh:sync[0:128]

Мне нужно преобразовать :(двоеточие) с помощью редактора vim, которое находится в квадратных скобках [] в ! как показано ниже:

Ram:con_[3!4]_aen[52!7]
Rakesh:sync[0!128]

Я попробовал это, но я не получаю вывод, как показано выше.

:%s/[%d:%d]/[%d!%d]/g
1
15.06.2020, 22:20
3 ответа

Вы можете использовать

:%s/\([[0-9]\+\):\([0-9]\+]\)/\1!\2/g

Обратите внимание, что мы сгруппировали элементы [number1и number2]с \([[0-9]\+\)и \([0-9]\+]\)и воспроизвели первый с \1, а второй с \2, поместив !между ними.

Я использовал [0-9]\+для обозначения одной или нескольких цифр, но вы можете упростить до [0-9]*(, что означает ноль или более цифр ), если вы уверены, что между двоеточием и каждой скобкой всегда есть число:

:%s/\([[0-9]*\):\([0-9]*]\)/\1!\2/g
0
18.03.2021, 23:27
:%s/\v\(\[[0-9]+):([0-9]+\])/\1!\2/g

\vВключить дополнительные функции регулярных выражений

(\[[0-9]+)группа захвата для открывающей скобки и хотя бы одна цифра

:двоеточие, которое вам не нужно

([0-9]+\])группа захвата хотя бы для одной цифры и закрывающая скобка

\1!\2содержимое двух групп захвата с нужным вам взрывом между

0
18.03.2021, 23:27

Можно использовать:

%s/\(\d\+\)\@<=:/!/g

\(\d\+\)Найти десятичное число

\@<=Примените положительный взгляд -сзади. Положительный вид -позади означает, что предыдущий шаблон (в этом случае выше )требуется для совпадения на следующем символе. Подробнее о том, как VIM реализует это , можно прочитать здесь .

:Соответствует ':'.

1
18.03.2021, 23:27

Теги

Похожие вопросы