在 Notepad++ 或 EditPlus 中使用正则表达式进行高级查找替换
在工作中适当地使用一些技巧,总可以让我们提高效率和准确率。
在 Notepad++ 中使用正则表达式进行高级查找替换,对于一些批量性质的工作是很有帮助的。我们来看下面一个例子:
这是在剑南春项目中遇到的一个实际问题。要求是在数据库 MISC_SERIAL_QUEUE 表中写入一大批模拟序列号数据,大致为这样的形式:
- 01234567890000000001
- 01234567890000000002
- 01234567890000000003
- ……
当然,该表还有一些其他字段,比如“生成日期”等,也需要写入值。
另外有一个潜在的要求,就是该数据写入过程应该是可重复的,且每次重复操作都应该很简单快捷。
基于以上要求,我们考虑最好能快速生成一大批 INSERT 语句。把这些 INSERT 语句保存在文件中,以便随时拿来执行。下文就是实际操作的步骤。
使用 Excel 批量生成序列号¶
先使用 Excel 制作一张表格,有 A、B、C 三列,分别代表:主键ID、流水线、序列号。
- 主键ID A2 和 A3 单元格填 1、2 ,选中这两个单元格,然后用鼠标往下拉多行,形成 1、2、3、4 ……。
- 流水线 B2 和 B3 单元格填 A、B ,选中这两个单元格,双击选中区域的右下角那个小点,自动在 B 列形成 A、B、A、B、A、B ……。
- 序列号 在 C2 单元格写一个公式 =TEXT(A2, "01234567890000000000") ,完成后就会看到 01234567890000000001 。
- 选中 C2 单元格,双击选中区域的右下角那个小点,自动在 C 列形成各个序列号。
- 另存为 CSV (逗号分隔) 格式的文件,比如 a.csv。CSV 就是 Comma Separated Version 的意思。这个文件的内容大致是这样:
1,A,01234567890000000001 2,B,01234567890000000002 3,A,01234567890000000003 4,B,01234567890000000004 5,A,01234567890000000005 6,B,01234567890000000006 7,A,01234567890000000007 8,B,01234567890000000008 9,A,01234567890000000009 10,B,01234567890000000010
使用 Notepad++ 或 EditPlus 进行批量替换,生成 INSERT 语句¶
然后使用 Notepad++ 或 EditPlus 打开这个 a.csv 文件。
- 使用正则表达式查找(注意查找模式一定要选择“正则表达式”):
(.*),(.*),(.*)
- 替换成:
Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (\1, '\2', '\3', SYSDATE);
- 这样就得到了最终要的结果:
Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (1, 'A', '01234567890000000001', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (2, 'B', '01234567890000000002', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (3, 'A', '01234567890000000003', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (4, 'B', '01234567890000000004', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (5, 'A', '01234567890000000005', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (6, 'B', '01234567890000000006', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (7, 'A', '01234567890000000007', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (8, 'B', '01234567890000000008', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (9, 'A', '01234567890000000009', SYSDATE); Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (10, 'B', '01234567890000000010', SYSDATE);
解释:
- .* 表示任意长度的字符串
- () 一对圆括号表示把括号中的内容作为一个参数(该参数可以用于替换)
- \1 \2 \3 分别表示第 1 、第 2 、第 3 对圆括号中包含的内容(也就是第 1 、第 2 、第 3 个参数)
这样就拿到了一批 SQL 语句。到数据库管理工具中去执行这些 SQL 就可以了。最后,不要忘记写上 COMMIT 语句。
posted on 2012-03-12 16:33 Code changes life 阅读(5580) 评论(0) 编辑 收藏 举报