如何使用 Vim 编辑器替换括号中的模式

如何使用 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

你可以使用:

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

\(\d\+\)求一个小数

\@<=采取积极的回顾。正向后看意味着前一个模式(在本例中为上面的模式)需要与下一个符号匹配。您可以阅读更多 VIM 如何实现这一点这里

:匹配':'。

答案2

您可以使用

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

看到我们已经将元素[number1number2]\([[0-9]\+\)和进行了分组,\([0-9]\+]\)并复制了第一个元素\1和第二个元素\2,并在它们之间放置了一个!

我曾经用来表示一位或多位数字,但如果您确定冒号和每个括号之间始终有一个数字,[0-9]\+则可以简化为(这意味着零个或多个数字):[0-9]*

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

答案3

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

\v启用额外的正则表达式功能

(\[[0-9]+)左括号和至少一位数字的捕获组

:你不想要的冒号

([0-9]+\])至少一位数字和右括号的捕获组

\1!\2两个捕获组的内容以及您想要的爆炸

相关内容