在 Notepad++ 或 EditPlus 中使用正则表达式进行高级查找替换

在工作中适当地使用一些技巧,总可以让我们提高效率和准确率。
在 Notepad++ 中使用正则表达式进行高级查找替换,对于一些批量性质的工作是很有帮助的。我们来看下面一个例子:

这是在剑南春项目中遇到的一个实际问题。要求是在数据库 MISC_SERIAL_QUEUE 表中写入一大批模拟序列号数据,大致为这样的形式:

  • 01234567890000000001
  • 01234567890000000002
  • 01234567890000000003
  • ……

当然,该表还有一些其他字段,比如“生成日期”等,也需要写入值。

另外有一个潜在的要求,就是该数据写入过程应该是可重复的,且每次重复操作都应该很简单快捷。

基于以上要求,我们考虑最好能快速生成一大批 INSERT 语句。把这些 INSERT 语句保存在文件中,以便随时拿来执行。下文就是实际操作的步骤。

使用 Excel 批量生成序列号

先使用 Excel 制作一张表格,有 A、B、C 三列,分别代表:主键ID、流水线、序列号。

  1. 主键ID A2 和 A3 单元格填 1、2 ,选中这两个单元格,然后用鼠标往下拉多行,形成 1、2、3、4 ……。
  2. 流水线 B2 和 B3 单元格填 A、B ,选中这两个单元格,双击选中区域的右下角那个小点,自动在 B 列形成 A、B、A、B、A、B ……。
  3. 序列号 在 C2 单元格写一个公式 =TEXT(A2, "01234567890000000000") ,完成后就会看到 01234567890000000001 。
  4. 选中 C2 单元格,双击选中区域的右下角那个小点,自动在 C 列形成各个序列号。
  5. 另存为 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 文件。

  1. 使用正则表达式查找(注意查找模式一定要选择“正则表达式”):
    (.*),(.*),(.*)
    
  2. 替换成:
    Insert into MISC_SERIAL_QUEUE (SQ_ID, SQ_PRODUCT_LINE, SQ_SN, SQ_DATETIME) Values (\1, '\2', '\3', SYSDATE);
    
  3. 这样就得到了最终要的结果:
    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编辑  收藏  举报

导航