我尝试使用逗号(,)来分隔前两个数字字段中的数千个,使用vim command
%s/\([0-9]\)\([0-9]\)\([0-9]\)\([0-9]\);/\1,\2\3\4;/g但是在这种情况下,它还会在第二行的9,995中添加逗号,我可以用什么来替换特定的N
输入
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)发布于 2021-11-01 23:25:04
有一种方法可以重复最后一个命令:@:,也可以指定重复次数,例如: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@:发布于 2021-11-02 08:42:14
我将使用更短、更易于管理的搜索模式:
:%s/\(\d\)\(\d\{3}\);/\1,\2;/g然后,我将删除/g标志,只替换每行的第一次匹配,因为目标是明确地不替换所有行上的所有匹配:
:%s/\(\d\)\(\d\{3}\);/\1,\2;然后,我将在每一行重复最后一个替换:
g&见:help \d、:help \{、:help :s_flags和:help g&。
发布于 2021-11-02 08:45:19
首先,我建议你清理一下你的领地:
:%s/\([0-9]\)\([0-9]\{3}\);/\1,\2;/g其次,g标志最后使vim替换所有出现的事件。如果没有旗子,它只会替换第一个。因为%在每一行上运行替换,所以%s//g将替换每一行的第一次出现。
由于您希望替换前两次出现的情况,所以只需运行两次。然而,我们想在这里变得优雅一点。有一个:&命令来重复最后一个替换。我们甚至可以把它们绑在一起:
:%s/\([0-9]\)\([0-9]\{3}\);/\1,\2;/ | norm %&更新:其他解决方案可以以相同的方式使用:
:%s/\([0-9]\)\([0-9]\{3}\);/\1,\2;/ | norm g&或
:%s/\([0-9]\)\([0-9]\{3}\);/\1,\2;/ | norm :@https://stackoverflow.com/questions/69803190
复制相似问题