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 了,清爽多了!