0%

sublime 实现多处文本替换

最近接到一个任务,配合 DBA 进行数据库升级,其实也没有多大难度,就是将依赖这个库的服务配置文件中的 URI、端口号替换下就好了,但我们这个库由于历史原因依赖的服务非常多,有 30 多个,而且每个服务的配置文件可能都有些许差别,还有就是有可能采用了不同的连接池,每个配置文件中即便是同一个字段也可能会声明在多处,修改时要处理多处。

前期我使用人肉查找替换的方式来做这件事,但由于要做两轮上线,第一轮是先将配置文件中的从库修改后上线,第二轮再修改主库配置。

由于工作太机械化,所以我准备发挥程序员的最大美德:懒惰。

先来分析下任务,其实就是把文本中命中的多个字段进行替换,如:

  • master.db.com 替换为 new.master.db.com
  • username 替换为 new_username
  • password 替换为 new_password

普通的文本编辑器只支持单个字段的替换,上边这种替换多个的情况需要人工手动进行多次操作。

我在一开始准备写个 Python 脚本,把每个服务的配置文件复制下来保存成文件,然后用脚本遍历这些文件,将里边的内容替换掉。

分析后觉得有些用杀鸡用宰牛刀,不能拿着锤子找钉子,于是就想探索下 sublime 中有没有类似的插件可以实现这个需求。于是就找到了这个 RegReplace 插件。

下面我记录下我使用这个插件的过程:

这里避免数据敏感,我用个其他例子做为演示:将一个文档中的 <p></p> 替换为 <h1></h1>

安装

command+shift+p,输入 install

20220217054253.png
从列表中搜索 RegReplace 回车安装就可以了。

自定义替换配置

20220217054701.png

编辑上边打开的配置文件,添加以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"replacements": {
"replace_opening_ps": {
"find": "<p>",
"replace": "<h1>",
"greedy": true,
"case": false
},
"replace_closing_ps": {
"find": "</p>",
"replace": "</h1>",
"greedy": true,
"case": false
}
}
}

估计一眼就能看明白,replace_opening_ps<p> 替换为 <h1>replace_closing_ps</p> 替换为 </h1>

自定义触发命令

20220217055403.png

填入:

1
2
3
4
5
6
7
8
9
10
11
12
[
{
"caption": "Reg Replace: Replace P to H1",
"command": "reg_replace",
"args": {
"replacements": [
"replace_opening_ps",
"replace_closing_ps"
]
}
}
]

也是一看就懂,这里不多解释了。

使用

  1. 准备一段文本:
1
2
<p>hello,world</p>
<p>你好,世界</p>
  1. command+shift+p 输入 replace ps 定位到我们配置的命令上,回车即可完成多处替换工作:

20220217061456.png

替换后的效果如下:

1
2
<h1>hello,world</h1>
<h1>你好,世界</h1>

现在时间凌晨 5.35 分,先写到这,准备去切换主库了。