在 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 語句。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM