regex - 如何在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 替换为增量变量?
解决方案
一发
您可以像其他答案一样声明一个变量,或者:
:%s/^x'\([^']*\)'/\=line('.')-1/
1
如果它不在第 1 行,则将最后一个替换为标题(id、电话、姓名)行的行号。
两步
您只需在代码中替换1
into即可获得以下信息0
id phone name
0 12345 jack
0 45678 Jojo
0 89456 Dio
0 34872 joseph
然后您可以将光标移动到第一个 id 0
,然后按:
ctrl-v
G
g
ctrl-a
它会将0
s 转换为从1
ctrl-v
: 列模式G
:选择第一列直到最后一行。g+ctrl-a
: 添加
推荐阅读
- mysql - Laravel 查询构建器仅限制表中的行,即使在连接中这些行必须出现多次
- visual-studio-code - VSCode - getConfiguration()返回缓存值?
- amazon-web-services - 如何实例化渲染模板文件的内容?
- django - upload_to 基于外键值
- c# - React 组件的 Web Api 以字符串格式返回 json
- java - 使用 BlurMaskFilter 绘制霓虹灯/辉光线
- javascript - 如何使用 AJAX 在 javascript 变量中发布数据
- wordpress - 如果父 has_term 而不是子 has_term 则显示
- java - 动态生成 PDf 文件
- r - r 循环编程不适用于具有傅立叶级数的时间序列