以下命令应该执行您想要的操作:
%s/^\d\{3} \zs9/
请注意,这仅在电话号码具有您提供的确切格式时才有效。正则表达式非常具体,使其不太可能搞砸文件中的任何其他内容。
既然你说你遇到了麻烦,我会解释一下这个正则表达式中发生了什么,这样即使你不决定使用它,你至少可以学到一点。
%s
意思是“在每一行做替换”。这实际上不是正则表达式的一部分。这是一个标准的 vim 命令。
^
是一个锚点,意思是“这必须是行首的位置”——或者,换句话说,“没有任何东西可以在该行的以下内容之前。”
\d\{3}
意思是“这里必须恰好是三个数字”,这意味着该行的前三个字符必须是数字。
(space) 表示接下来必须有一个文字空格。去搞清楚。
\zs
意思是“真正从这里开始比赛”。之前的东西必须匹配,但不要“选择”之前的任何东西。
9
表示接下来必须有文字9
。这就是你要匹配的。
/
,最后一个字符,意思是“接下来的一切都是你应该替换匹配的东西”。由于没有任何内容跟随它,它的意思是“什么都没有替换匹配”。
完毕!
编辑:
显然,有问题的数据文件在第一组数字和第二组数字之间没有一个空格。为了解决这个问题,请更改影响空格匹配的正则表达式部分。
因此,正则表达式中的空格应替换为\s\+
,意思是“匹配任何空白字符一次或多次”。因此,正则表达式将是:
%s/^\d\{3}\s\+\zs9/