Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux Vim 指令批次修改 SQL 檔案 ID 欄位:let + g/normal + 遞增變數實戰技巧

編輯:關於 Linux

需將 SQL 腳本中大量 INSERT 語句的自增 ID 依指定起始值 (如 151) 重新編號。Vim 強大的 :global + :substitute + 表達式暫存器 (\=) 可單指令完成。本文詳細拆解指令結構、提供通用模板與 Perl 替代方案。

Vim 批次修改 ID 示意圖

場景與目標

-- online.sql 原始內容
insert into ct values(1, 'sss', 2, 4);
insert into ct values(1, 'sss', 2, 4);
insert into ct values(1, 'sss', 2, 4);
...
-- 目標: 將第一個值 1 依序改為 151, 152, 153...

核心 Vim 指令 (單行完成)

:let n=151 | g/values(\zs\d\+/s//\=n/ | let n+=1

指令逐段拆解

片段功能說明
let n=151 初始化變數 n = 151 :help let
| 指令分隔符 :help :bar
g/pattern/ 全域搜尋符合 pattern 的行並執行後續 ex 指令 :help :g
values(\zs\d\+ 搜尋模式:values( 後的數字 (\\zs 設定匹配起點) :help /\zs
s//\=n/ 替換匹配部分為變數 n 的值 (\\= 表達式暫存器) :help :s\=
| let n+=1 變數 n 遞增 1 下一行匹配時使用新值

執行流程模擬

  1. n = 151
  2. 第 1 行匹配 values(1 → 替換為 151 → n = 152
  3. 第 2 行匹配 values(1 → 替換為 152 → n = 153
  4. ... 以此類推

結果驗證

insert into ct values(151, 'sss', 2, 4);
insert into ct values(152, 'sss', 2, 4);
insert into ct values(153, 'sss', 2, 4);
...

補充:Perl 一行指令批次跨檔案替換

# 當前目錄及子目錄所有 pom.xml 中的 Maven 中央倉庫 URL 導向內部 Nexus
find -name 'pom.xml' | xargs perl -pi -e 's|https://repo1.maven.org/maven2|https://localhost:8081/nexus/content/groups/public|g'

# 遞迴替換 HTML 關鍵字
find . -type f -name '*.html' | xargs perl -pi -e 's|old_text|new_text|g'

# 僅列出包含 log 關鍵字的目錄
find ./ -name '*log*' -type d

Vim 視覺模式區塊替換 (補充)

" 1. 進入視覺行模式 V,選取行範圍
" 2. 輸入 : 進入命令列 (自動帶入 '<,'>)
:'<,'>s/old/new/g

" 或指定行號範圍
:10,31s/old/new/g

" 顯示行號輔助定位
:set number
:set nonumber

正則表達式進階提醒

  • \zs/\ze 設定匹配範圍邊界,避免替換到前綴
  • \= 後可接任意 Vim Script 表達式 (函數呼叫、運算、條件判斷)
  • submatch(n) 取得第 n 個捕獲組內容

掌握 :g/pattern/s//\=expr/ 模式,即可在 Vim 內以程式化方式處理複雜的結構化文字批次修改,效率遠超外部腳本。

Copyright © Windows教程網 All Rights Reserved