sed命令語法詳解

水车發表於2024-11-11

sed(stream editor)是一個非常強大的文字處理工具,用於對文字進行查詢、替換、插入、刪除等操作。它通常用於批次處理和自動化指令碼中。

1. sed 命令的基本語法

sed [options] 'command' file
  • optionssed 命令的選項,例如 -i 用於直接修改檔案,-e 用於執行多個命令等。
  • commandsed 執行的操作,如查詢和替換、刪除等。
  • file:要處理的檔案。如果沒有指定檔案,sed 將從標準輸入(通常是鍵盤)讀取資料。

2. 常用的 sed 命令格式

sed 命令的核心格式是:

sed 'operation/pattern/replace' filename

其中:

  • operation:指定要執行的操作,常見操作有替換(s)、刪除(d)等。
  • pattern:查詢的模式,可以是一個正規表示式。
  • replace:替換內容(僅適用於替換操作)。

3. 常見 sed 命令詳解

3.1 查詢和替換(s 命令)

sed 最常用的功能之一是替換文字,使用 s 命令(substitute)進行查詢和替換。

sed 's/old_pattern/new_pattern/' filename
  • old_pattern:要查詢的內容(可以是正規表示式)。
  • new_pattern:替換成的內容。
  • filename:要處理的檔案。
例子:
sed 's/hello/world/' file.txt

此命令會將 file.txt 中的第一個 hello 替換為 world

常用選項:
  • g:全域性替換。預設情況下,s 只會替換每一行的第一個匹配項。加上 g 之後會替換行內所有匹配項。
    sed 's/hello/world/g' file.txt
    
  • i:忽略大小寫進行匹配。
    sed 's/hello/world/i' file.txt
    
  • n:顯示替換後的結果(而不是預設的輸出)。
    sed -n 's/hello/world/p' file.txt
    

3.2 刪除行(d 命令)

刪除特定行或符合條件的行。

sed 'line_numberd' filename
  • line_number:行號,指定要刪除的行。
  • pattern:符合特定模式的行。
例子:
  • 刪除第 3 行:
    sed '3d' file.txt
    
  • 刪除所有包含 pattern 的行:
    sed '/pattern/d' file.txt
    

3.3 替換並修改檔案(-i 選項)

預設情況下,sed 會將修改後的內容輸出到標準輸出(控制檯)。使用 -i 選項可以直接修改檔案內容。

sed -i 's/old_pattern/new_pattern/' filename

如果沒有提供副檔名,檔案會直接被修改。如果想要建立備份,可以使用副檔名:

sed -i.bak 's/old_pattern/new_pattern/' filename

此命令會將原檔案修改並建立一個副檔名為 .bak 的備份檔案。

3.4 多行處理(-np

預設情況下,sed 會列印處理過的每一行。如果只想列印符合某個條件的行,可以使用 -n 選項配合 p 命令。

sed -n 'pattern/p' filename

這表示僅列印匹配 pattern 的行。

例子:
  • 只列印包含 pattern 的行:
    sed -n '/pattern/p' file.txt
    

3.5 多個命令(-e 選項)

使用 -e 選項,可以在一個 sed 命令中執行多個操作。

sed -e 'command1' -e 'command2' filename
例子:
  • 先刪除第 2 行,再替換第 3 行中的內容:
    sed -e '2d' -e '3s/foo/bar/' file.txt
    

3.6 使用行範圍(, 運算子)

sed 支援指定處理的行範圍,常用運算子是 ,,表示一個行範圍。

sed 'start_line,end_line command' filename
例子:
  • 替換第 2 行到第 4 行之間的內容:
    sed '2,4s/foo/bar/' file.txt
    

3.7 使用正規表示式

sed 支援強大的正規表示式功能,你可以使用它來匹配複雜的文字模式。

  • ^:表示行的開始。
  • $:表示行的結束。
  • .:匹配任意一個字元。
  • *:匹配前面的字元零次或多次。
  • []:匹配字元類。
  • \( \):用來分組和捕獲。
  • \1, \2:引用捕獲組。
例子:
  • 替換以 start 開頭,end 結尾的行:
    sed 's/^start.*end$/match/' file.txt
    

3.8 行號和範圍

你可以指定行號來進行替換或刪除操作。

  • 替換第 2 行的 oldnew
    sed '2s/old/new/' file.txt
    
  • 刪除從第 3 行到第 5 行的內容:
    sed '3,5d' file.txt
    

3.9 擴充套件正規表示式(-E-r 選項)

sed 預設使用基礎正規表示式(BRE),但你可以透過 -E(或者在某些系統上使用 -r)選項啟用擴充套件正規表示式(ERE),它支援更復雜的正規表示式語法。

sed -E 's/(foo|bar)/baz/' file.txt

4. 總結

  • sed 是一個非常強大的文字處理工具,能夠高效地完成查詢、替換、刪除等操作。
  • 常用操作包括:替換(s)、刪除(d)、列印(p)、修改檔案(-i)等。
  • 支援正規表示式,可以進行非常靈活的文字匹配。
  • 透過組合不同的 sed 命令和選項,可以實現多種複雜的文字處理任務。

如果你需要更多的資訊或具體例子,可以隨時提問!

相關文章