首页 > 解决方案 > Vim :s 替换一行中出现的特定 N < g

问题描述

我尝试使用逗号 (,) 来分隔前两个数字字段中的千位,使用vim command

%s/\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\);/\1,\2\3\4;/g

但在这种情况下,它还会在第二行的 9,995 中添加逗号,我可以用什么来替换特定的 N < g 出现。

输入

BitstreamCyberCJK;Freeware;30275;28686;v2.0 ;beta (1998-03-17)
Y.OzFontN;Freeware;21957;7621;v13.00 sfnt rev 9995; Pen-Ji (2010-08-24)

预期产出

 BitstreamCyberCJK;Freeware;30,275;28,686;v2.0 ;beta (1998-03-17)
 Y.OzFontN;Freeware;21,957;7,621;v13.00 sfnt rev 9995; Pen-Ji (2010-08-24)

标签: linuxvimvi

解决方案


有一种方法可以重复最后一个命令:@:另外,您可以指定重复次数,例如:10@:.

所以,从只替换第一个匹配开始:%s/\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\);/\1,\2\3\4;/

然后,由于我们已经完成了 N 次替换,重复 N-1 次。

例如,要替换前 10 个数字,请使用:

%s/\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\);/\1,\2\3\4;/
9@:

推荐阅读