Linux sed 串流編輯器 (Stream Editor)

sed 主要用來對文字進行「非互動式」的編輯。 最最最常用的功能就是:搜尋並取代 (Search and Replace)

基本語法 (取代)

sed 's/原本字串/新字串/參數' 檔案
  • s: Substitute (取代)
  • g: Global (全域取代,一行如果出現兩次都會被換掉。沒加的話只換第一個)

常用範例

1. 搜尋並取代

把檔案中的 "foo" 換成 "bar",並顯示在螢幕上(不改動檔案)。

sed 's/foo/bar/g' example.txt

2. 直接修改檔案 (-i)

危險指令! 加上 -i (in-place) 會直接寫回檔案。建議先備份。

# 備份為 example.txt.bak 並修改
sed -i.bak 's/foo/bar/g' example.txt

3. 刪除特定行 (d)

# 刪除第 1 行
sed '1d' example.txt

# 刪除第 2 到第 5 行
sed '2,5d' example.txt

# 刪除包含 "error" 的行
sed '/error/d' example.txt

4. 在特定行插入 (i, a)

# 在第 1 行 "前" 插入一行文字 (Insert)
sed '1i\This is header' example.txt

# 在第 1 行 "後" 插入一行文字 (Append)
sed '1a\This is footer' example.txt

進階:使用不同的分隔符號

如果你的字串裡滿滿的斜線 / (例如網址或路徑),用預設的 / 當分隔符號會也要一直跳脫 (Escape) 很煩。 sed 允許你自訂分隔符號,例如改用 #

# 把 /var/www 換成 /home/www
sed 's#/var/www#/home/www#g' config.conf

這樣就不用寫成 s/\/var\/www/\/home\/www/g 了,清爽多了!