sed (stream editor) 是一個 stream 編輯軟體,直接對檔案一行一行處理。不像一般編輯軟體將檔案載入 buffer 後進行處理。sed 支援正規表示式及流程控制,可視為一種小型指令檔語言。
- sed [選項] [-e] '編輯命令' [輸入檔]
- sed [選項] -e '編輯命令1' -e '編輯命令2' [輸入檔]
- sed [選項] -f 命令檔 [輸入檔]
- -n:不自動列印。預設除非刪除,不然每行都會印出。加了 -n 選項,
- -i:直接修改檔案內容
- [位址[,位址]]動作
位址
用來決定哪些行套用動作,不然每行都套用。有些動作不能有位址;有些可以有一個,指定符合的那些行;有些可以有兩個用「,」隔開,標示行的範圍。位址格式如下:
- 數字:代表行數
- 數字~step: 數字開始每 step 行。在 GNU 數字可以為 0。
- /正規表示式/ 或 \c正規表示式c:比對符合的行,c 是任何字元。
- $:最後一行
- 整組位址後加「!」代表否定
- 0,位址:位址是正規表示式的比對,讓第 1 行可作為結束。
- 位址,+N:位址到其之後 N 行。
- 位址,~N:位址到其之後行號為 N 倍數的行。
動作
不能有位址的動作- #comment:整行為註解。
- : label:供動作 b 或 t 跳躍的 label。
- }:{ } 命令區塊的結束。
- =:印出行號。
- a[字串]:(append) 後面附加行放字串。新增多行,行尾用 \ 後換行。
- i[字串]:(insert) 插入新行,類似 a,但是新增在前面。
- q[結束碼]:
- Q[結束碼]:
- r檔名:後面附加檔案裡的內容。
- R檔名:
- {:命令區塊開始。
- b[label]:(branch) 跳到 label 或命令檔最後。
- c[字串]:(change) 整行取代
- d:(delete) 整行刪除
- D:
- l:類似 p
- l[width]:
- n:
- N:合併下一行。例如 sed 'N;s/\n/ /' 合併下行,並把換行取代成空白
- p:列印,通常搭配選項 -n 使用
- P:
- s/正規表示式/替代文字/[取代選項]:(substitute) 取代,比對正規表示式符合的話用替代文字取代。
- 「/」可以用其它符號代替,例如「,」。
- 「替代文字」可以包含的特殊符號
- &:整個比對符合的部份
- \1 到 \9:比對的群組
- \L:改為小寫
- \l:首字改為小寫
- \U:改為大寫
- \u:首字改為大寫
- 取代選項
- 未指定只取代一行中第一個符合
- g:global,一行中全部的符合都取代
- 數字:一行中第幾個符合才取代
- w file:寫到檔案
- 範例
- s/^/#/:每行開頭插入 #。
- t[label]:(test) 執行 s 如果成功則跳到 label 或命令檔最後。
- T[label]:同 t,GNU 擴展。
- w:
- W:
- y/source/dest/:
使用保留空間的動作
保留空間 (hold space) 是一個另外的儲存空間,用來記憶內容。這些動作都接受位址範圍。- g:取代為保留空間內容
- G:後面附加保留空間內容
- h:覆蓋保留空間
- H:附加到保留空間
- x:跟保留空間內容互相交換
一系列編輯命令用「;」隔開。
範例
- sed 's/\(NAME=\).*/\1abc/g' config.file:將設定檔 config.file 中的 NAME= 設為 abc
- sed -ne '/MHz/ { /disabled\|passive\|radar/d; s/.*\[//; s/\].*//; p; q }')
- sed ':a;/0$/{N;s/\n//;ba}':迴圈執行,如果目前行以 '0' 結束,則合併下一行,並移除換行
- Shell 變數字串處理
- 目錄檔案字串替換
- 多行處理:http://www.study-area.org/cyril/scripts/scripts/node57.html
- 跳躍:http://www.study-area.org/cyril/scripts/scripts/node58.html
- 多檔處理:http://www.study-area.org/cyril/scripts/scripts/node59.html
參考來源
- http://linux.vbird.org/linux_basic/0330regularex.php#sed
- man sed
- http://www.rtfiber.com.tw/~changyj/regex.pdf (講得很清楚)
- Learn to use the Sed text editor
- http://www.rtfiber.com.tw/~changyj/sed/
- 書:龍門少尉推薦 O'Reilly 的 sed & awk
http://www.tldp.org/LDP/abs/html/
參考:Shell Script 文章
沒有留言:
張貼留言