首页 > 解决方案 > 如何在vim中使用正则表达式替换为递增的数字变量

问题描述

我有一个文件,内容如下:

id      phone   name
x'1234' 12345   jack
x'4567' 45678   Jojo
x'7890'  89456  Dio
x'4591'  34872  joseph

我想把它解析成这样:

id  phone   name
1   12345   jack
2   45678   Jojo
3    89456  Dio
4    34872  joseph

我知道基本的正则表达式可以将所有 id 替换为任何字符串,如下所示:

:%s/x'\(\w\+\)'/1/g

它会变成:

id  phone   name
1   12345   jack
1   45678   Jojo
1    89456  Dio
1    34872  joseph

如何将 id 替换为增量变量?

标签: regexvimvi

解决方案


一发

您可以像其他答案一样声明一个变量,或者:

:%s/^x'\([^']*\)'/\=line('.')-1/  

1如果它不在第 1 行,则将最后一个替换为标题(id、电话、姓名)行的行号。

两步

您只需在代码中替换1into即可获得以下信息0

id  phone   name
0   12345   jack
0   45678   Jojo
0    89456  Dio
0    34872  joseph

然后您可以将光标移动到第一个 id 0,然后按:

ctrl-v G g ctrl-a

它会将0s 转换为从1

  • ctrl-v: 列模式
  • G:选择第一列直到最后一行。
  • g+ctrl-a: 添加

推荐阅读