首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Vim中多次将搜索的模式附加到一行的末尾?

如何在Vim中多次将搜索的模式附加到一行的末尾?
EN

Stack Overflow用户
提问于 2015-02-12 13:49:24
回答 2查看 47关注 0票数 2

我有下面的字符串。

ABC-10,some_text,EDFG-24,some_text2,...and等.

我需要在每一行末尾添加以下内容:ABC#10#EDFG#24#.诸若此类。

这是我的搜索模式。

代码语言:javascript
复制
\\(\\w\\{-}\\)-\\(\\d\\{1,2\\}\\)

我可以进一步使用\1 (字母)和\2 (数字)来获得模式所需的部分。但是如何同时打印所有匹配的图案呢?

如果我写

代码语言:javascript
复制
:%s/search_pattern/&#\1#\2

我只得到第一个匹配模式,即ABC#10。如何添加所有匹配模式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-12 14:58:19

对于正则表达式来说,这是一项艰巨的任务,因为您必须假设解析整行以插入数据,并且不能再次解析它(除非使用递归的解析,我认为这是vim所缺乏的),所以一个肮脏的选项(只是为了好玩)是使用一个循环并多次应用相同的正则表达式,例如:

代码语言:javascript
复制
:for i in range(10) | s/\v((\w{-})-(\d{1,2}))(.*\2#\3)@!(.*)$/\1\5#\2#\3/e | endfor

它为您正在搜索的文本进行分组,并使用非正面的前瞻性断言来检查未添加的部分。

请注意,我假设同一行中不会有超过10个块,因为我不会再循环多次,您可以增加(或减少这个数字)。还请注意,对于每一行,vim将尝试它十次,但它不会抱怨,因为我使用了/e标志来沉默它。

在我的例子中得出的结果:

代码语言:javascript
复制
[ABC-10, some_text], [EDFG-24, some_text2]#ABC#10#EDFG#24
票数 4
EN

Stack Overflow用户

发布于 2015-02-12 13:53:01

在“替换”命令末尾添加/g

代码语言:javascript
复制
:%s/search_pattern/&#\1#\2/g
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28479143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档