sed,Stream editor的縮寫,功能很強大,能夠進行文本替換刪除打印等,與grep、awk不一樣的是,它側重點在於整行的編輯;正則表達式
它的工做過程是,首先將文件分紅以行爲單位,而後將每一行逐次的放入緩衝區(模式空間),sed將其處理完畢後發送到標準輸出,處理完最後一行sed便運行結束。因爲sed是對存儲在緩衝區的文件進行輯,所以,sed不會修改或者損壞正在編輯的文件。express
sed的用法: sed [OPTION]... 'script' [input-file]...less
sed的選項參數比較少,主要有這麼幾個:ide
-n, --quiet,--silent:對不能匹配模式的行,默認不輸出到屏幕ui
-e script, --expression=script:多條件編輯spa
-f,script-file, --file=script-file:從指定的script-file中讀取腳本regexp
注意:最好用絕對路徑ip
-i[SUFFIX],--in-place[=SUFFIX]:在原文件直接進行編輯操做 不要輕易用input
-r, --regexp-extended:使sed支持擴展正則表達式it
處理命令Command:
不一樣於grep的pattern,這裏command不只包含了正則表達式所匹配的模式,並且還包含了對匹配進行處理的命令。同時,sed的匹配是以‘/’開頭和結尾的,中間包含着對文本的匹配模式,如/^less/就是匹配全部以less開頭的行。而在匹配以後跟着的是對匹配結果的處理命令,例如/^less/d就是將全部以less開始的行刪除;
命令有以下幾個:
=:顯示被模式匹配的行的行號
例如:sed -n '/^$/=' /etc/grub2.cfg
a \text 追加
i \text 插入
c \text 替換
d 在模式空間中刪除被模式匹配的行;因此這樣的行不能再進行標準輸出
注意:使用d命令的時候不要使用-n選項;
p:顯示模式空間中被模式匹配的行
注意:一般搭配-n選項
w filename:把匹配到的行另存到一個文件中
r filename:將這個文件的內容追加到模式空間中被模式匹配的行以後
!Command:在模式空間中被模式匹配的行
s///:查找替換,分隔符能夠任意更換,只要相同就能夠
s@@@,s###,s,,, ...
s/pattren/text/[control]
例如:sed s@/etc/fstab@/etc/mtab@
pattren
text:要替換成的內容,純文本
control:如何進行替換
g:行內所有替換
p:顯示替換成功的行
w file:保存到
舉例:
刪除包含root的行
# sed '/root/d' file
刪除從root行開始到whj行結束之間全部的行
# sed '/root/,/whj/d' file
刪除第1行到第5行之間全部的行
# sed '1,5d' file
刪除全部不包含Sam的行
# sed '/Sam/!d' file
將包含Sam行的love改爲hate
# sed '/Sam/s/love/hate/g' file
刪除每行後三個字符
# sed 's/...$//' file