加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

regex – 如何用vim中每行开头的从1开始的运行数替换子匹配

发布时间:2020-12-15 21:08:44 所属栏目:安全 来源:网络整理
导读:我想用一个字符串替换每个子匹配,该字符串的递增索引从每行开头的1开始,因此替换字符串将是varargin {1},varargin {2},varargin {3} …对于更大的数字数字字符串自然需要多于1个字符,例如:… … varargin {9},varargin {10} …输入数据是MATLAB代码,示例输
我想用一个字符串替换每个子匹配,该字符串的递增索引从每行开头的1开始,因此替换字符串将是varargin {1},varargin {2},varargin {3} …对于更大的数字数字字符串自然需要多于1个字符,例如:… … varargin {9},varargin {10} …输入数据是MATLAB代码,示例输入和所需输出如下所示.我主要是寻找一个 vim解决方案,但其他方法也很受欢迎.

下面的正则表达式创建从1开始的运行索引,但这些只对每一行都有变化.

:let @a=1 | %s/v.*'zs.*ze);/=substitute(submatch(0),'s[a-zA-Z0-9{}_.]*',' varargin{'.(@a+setreg('a',@a+1)).'}','g')/g

我的问题是:

如何在每行的开头将索引重置为1并在每个子匹配之间将索引递增1?

上面的代码是在http://vim.wikia.com/wiki/Substitute_with_incrementing_numbers处提供的“替代升序号”示例的修改版本:

:let @a=1 | %s/abc/='xyz_'.(@a+setreg('a',@a+1))/g

示例输入#1:

messages.msg1.English = xprintf('analysis directory is on %sn',analysis_dir);

期望的输出例如输入#1:

messages.msg1.English = xprintf('analysis directory is on %sn',varargin{1});

示例输入#2:

messages.msg15.English = xprintf('the following sessions (%d pcs) have been approved: %s',handling_struct.n_of_accepted,handling_struct.accepted_sessions_vector);

期望的输出例如输入#2:

messages.msg15.English = xprintf('the following sessions (%d pcs) have been approved: %s',varargin{1},varargin{2});

示例输入#3:

messages.msg19.English = xprintf('looking for files ''%s'' in %d separate dirs',give_file_struct.regex,number_of_dirs);

期望的输出例如输入#3:

messages.msg19.English = xprintf('looking for files ''%s'' in %d separate dirs',varargin{2});

解决方法

在这种情况下,我将使用以下命令.

:g/^/let n=[0] | s/abc/='xyz_'.map(n,'v:val+1')[0]/g

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读