Vim :s 替换一行中出现的特定 N < g 处

DOS*_*SAN 5 linux vi vim

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

%s/\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\);/\1,\2\3\4;/g
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,它还会在第二行的 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)
Run Code Online (Sandbox Code Playgroud)

预期产出

 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)
Run Code Online (Sandbox Code Playgroud)

Саш*_*кин 6

有一种方法可以重复最后一个命令:@:此外,您还可以指定重复次数,例如: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@:
Run Code Online (Sandbox Code Playgroud)