Имея файл с двумя полями, разделенными :(двоеточие), как показано ниже:
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
Вы можете использовать
:%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
:%s/\v\(\[[0-9]+):([0-9]+\])/\1!\2/g
\v
Включить дополнительные функции регулярных выражений
(\[[0-9]+)
группа захвата для открывающей скобки и хотя бы одна цифра
:
двоеточие, которое вам не нужно
([0-9]+\])
группа захвата хотя бы для одной цифры и закрывающая скобка
\1!\2
содержимое двух групп захвата с нужным вам взрывом между
Можно использовать:
%s/\(\d\+\)\@<=:/!/g
\(\d\+\)
Найти десятичное число
\@<=
Примените положительный взгляд -сзади. Положительный вид -позади означает, что предыдущий шаблон (в этом случае выше )требуется для совпадения на следующем символе. Подробнее о том, как VIM реализует это , можно прочитать здесь .
:
Соответствует ':'.