首頁 > 文字處理與搜尋 > awk-gsub

awk-gsub:全域字串替換

awk 命令中使用的 `gsub` 函數用於將所有符合特定正規表達式的字串全局替換為另一個字串。當您需要批量修改檔案內容或串流中出現的多個模式時,它非常有用。

概述

`gsub` 是 Global Substitution 的縮寫,它是一個在 `awk` 腳本中將所有符合特定正規表達式的部分更改為指定字串的函數。與只更改第一個匹配項的 `sub` 函數不同,`gsub` 會更改所有匹配項。

gsub 函數語法

gsub(正規表達式, 替換字串, [目標字串])

  • 正規表達式 (regex): 定義要查找的模式的正規表達式。
  • 替換字串 (replacement): 要用於替換找到的模式的字串。
  • 目標字串 (target_string): 要執行替換操作的字串。如果省略,則應用於當前記錄的整個內容 ($0)。

返回值

`gsub` 函數返回一個整數,表示發生了多少次替換。此返回值在條件語句等場景中非常有用。

使用範例

使用 `gsub` 函數進行各種字串替換的範例。

將檔案中所有 'old' 替換為 'new'

echo 'This is an old file with old data.' > data.txt
awk '{gsub(/old/, "new"); print}' data.txt

將 data.txt 檔案中所有出現的 'old' 單詞更改為 'new'。顯示修改後的內容。

將空格替換為連字號

echo 'Hello World from Awk' | awk '{gsub(/ /, "-"); print}'

將輸入字串中的所有空格更改為連字號 (-)。

僅在特定欄位內進行替換

echo 'field1 field2 apple' | awk '{gsub(/a/, "X", $3); print}'

僅在第三個欄位 ($3) 中將 'a' 替換為 'X'。(例如:'apple banana cat' -> 'apple banana cXt')

不區分大小寫的替換

echo 'Apple is an apple.' | awk 'BEGIN {IGNORECASE=1} {gsub(/apple/, "orange"); print}'

將 `IGNORECASE` 變數設置為 1,以不區分大小寫的方式將 'apple' 替換為 'orange'。

移除所有數字

echo 'Product ID: 12345 ABC' | awk '{gsub(/[0-9]/, ""); print}'

從字串中移除所有數字。

提示與注意事項

使用 `gsub` 函數時的實用提示和注意事項。

與 sub 函數的區別

`gsub` 替換所有匹配項,而 `sub` 函數僅替換第一個匹配項。請根據需要選擇合適的函數。

  • `gsub(regex, replacement, target)`:替換所有匹配項
  • `sub(regex, replacement, target)`:僅替換第一個匹配項

正規表達式特殊字元

要在正規表達式中使用字面量特殊字元,如 `.` `*` `+` `?` `[` `]` `(` `)` `|` `^` `$` `\`,您需要使用 `\` 進行轉義。例如,要查找實際的點 (.),請使用 `\.`。

省略目標字串時的注意事項

如果省略 `target_string`,則替換操作默認應用於當前記錄的整個內容 ($0)。如果您只想應用於特定欄位,請務必使用 `gsub(regex, replacement, $N)` 的形式指定欄位。

替換字串中的反斜線

在替換字串中,反斜線 (`\`) 可能具有特殊含義。例如,`\&` 表示匹配的整個字串。如果要使用字面量反斜線,則需要將其轉義兩次,例如 `\\`。


相同類別命令