sed
(stream editor)是一個非常強大的文字處理工具,用於對文字進行查詢、替換、插入、刪除等操作。它通常用於批次處理和自動化指令碼中。
1. sed
命令的基本語法
sed [options] 'command' file
options
:sed
命令的選項,例如-i
用於直接修改檔案,-e
用於執行多個命令等。command
:sed
執行的操作,如查詢和替換、刪除等。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 多行處理(-n
和 p
)
預設情況下,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 行的
old
為new
: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
命令和選項,可以實現多種複雜的文字處理任務。
如果你需要更多的資訊或具體例子,可以隨時提問!