Sed簡介
sed 是一種線上編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變,除非你使用重新導向儲存輸出。Sed主要用來自動編輯一個或多個檔案;簡化對檔案的反覆操作;編寫轉換程式等。
命令格式:sed -options script file 或 sed -options -f scriptfile file
系統:Ubuntu11.10
sed:GNU sed version 4.2.1
options命令項
-n 關閉自動輸出模式空間的內容
-e script 要執行的指令碼命令
-f file 要執行的指令碼命令檔案,如果是大量指令碼,你可以將他們寫入一個檔案然後用-f指定該檔案作為要執行的命令
-i[suffix] 就地編輯檔案,如果指定了尾碼[suffix],則備份源檔案
-l N 指定要編輯的行,可指定多行,如1,3表示1 2 3行
--posix 禁用所有GUN擴充
-r 在指令碼命令中使用擴充Regex
-s 將同時處理的多個檔案分開,而不是將他們作為一個整體的長資料流
-u 從輸入檔案匯入最小少的資料,更頻繁的重新整理輸出緩衝
script指令碼命令
a\ 在當前行後面加入一行文本
b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾
c\ 用新的文本改變本行的文本
d 從模板塊(Pattern space)位置刪除行
D 刪除模板塊的第一行
i\ 在當前行上面插入文本
h 拷貝模板塊的內容到記憶體中的緩衝區
H 追加模板塊的內容到記憶體中的緩衝區
g 獲得記憶體緩衝區的內容,並替代當前模板塊中的文本
G 獲得記憶體緩衝區的內容,並追加到當前模板塊文本的後面
l 列表不能列印字元的清單
n 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令
N 追加下一個輸入行到模板塊後面並在二者間嵌入一個新行,改變當前行號碼。
p 列印模板塊的行
P 列印模板塊的第一行
q 退出Sed
r file 從file中讀行
w file 寫並追加模板塊到file末尾
W file 寫並追加模板塊的第一行到file末尾。
t label if分支,從最後一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾
T label 錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾
! 表示後面的命令對所有沒有被選定的行發生作用
s/re/string 用string替換Regexre
= 列印當前行號碼
# 把注釋擴充到下一個分行符號以前
以下的是替換標記:
* g 表示行內全面替換
* p 表示列印行
* w 表示把行寫入一個檔案
* x 表示互換模板塊中的文本和緩衝區中的文本
* y 表示把一個字元翻譯為另外的字元(但是不用於Regex)
元字元集參考:http://blog.csdn.net/luochuan/article/details/7346811
例子:
將sed.ini檔案中以Well開始的行後面添加 end;
#sed -e '/^Well/a\ end;' /etc/sed.ini
刪除sed.ini檔案的第7行到末尾的內容
#sed -e '7,$d' /etc/sed.ini
刪除sed.ini中所有包含this的行
#sed -e '/this/d' /etc/sed.ini
將sed.ini檔案中的this替換成that
#sed -e 's/this/that/g' /etc/sed.ini
將sed.ini檔案中以Well開始的行的Well替換成Ok,並只列印匹配到的行
#sed -n -e 's/^Well/Ok/p' /etc/sed.ini
將sed.ini檔案中的loveable替換成lovers
#sed -e 's/(love)able/\1rs/g' /etc/sed.ini
多點編輯命令-e
將sed.ini檔案中Well開始的行的Well替換成Ok,並且將行內的here後面加this
#sed -e 's/^Well/Ok/g' -e '/here/a\ this' /etc/sed.ini
讀取sed.php中的內容並顯示在sed.ini中所有以this開始的行後面
#sed -e '/^this/r /etc/sed.php' /etc/sed.ini
將sed.ini中所有包含php的行寫入到sed.php檔案中
#sed -e '/php/w /etc/sed.php' /etc/sed.ini
將---插入包含this的行前面
#sed -e '/this/i\---' /etc/sed.ini
將sed.ini中包含this的行放到緩衝區並刪除該行,然後將包含that的行用緩衝區的內容替換掉
#sed -e '/this/{h;d}' -e '/that/{p;x}' /etc/sed.ini
將sed.ini中包含this的行放到緩衝區,然後將其添加到包含that的行後
#sed -e '/this/{h;d}' -e '/that/G' /etc/sed.ini
將sed.ini中包含this的行的下一行中的that替換成this
#sed -e '/this/{n;s/that/this/} /etc/php.ini
列印sed.ini的內容直到第5行然後退出
#sed -e '5q' /etc/sed.ini
列印sed.ini並顯示行號
#sed -e '=' /etc/sed.ini
將sed.ini檔案中包含this的行用the new words替換
#sed -e '/this/c\the new words' /etc/sed.ini
列印sed.ini檔案的第二行
#sed -n -e '2p' /etc/sed.ini