sed 是linux命令中用於行數據處理的工具,能處理來自管道或者文件的輸入。linux
語法: sed [選項] '[過濾字符][{]處理命令[}]',其中 []包圍的表示不是強制必寫。正則表達式
1. sed能對行進行處理緩存
-n: 安靜模式,只輸出作過處理的行,不然會重複輸出處理的行。安靜模式下只有顯示的使用p纔會輸出到屏幕上。app
-e: 後面緊接處理命令,一次執行一個,後面還能夠繼續使用這個選項執行其餘命令,避免使用管道或者不能多個命令同時使用的狀況編輯器
-f: 後面接腳本文件工具
-r: 在處理命令中使用擴展正則表達式,默認是基礎正則表達式spa
-i: 以文件做爲輸出,即直接修改文件,而不會輸出到到屏幕ip
-c: 在-i的狀況下,使用複製方式而不是直接修改文件的全部關係(ownership),應該就是不會修改文件的owner字符串
2. 處理命令有下面幾種(若是不執行如下命令只要在命令前加!,例如'1!p'表示第一行不打印,其餘命令相似):基礎
p: 打印輸出行,語法--> 'm,np',其中m,n是行號,最後一行用$表示,若是是一行則爲'mp',若是m,n都沒有值則表示當前行。例如第2到7行-->'2,7p',第5到最後 一行-->'5,$p'
i: 在某行以前插入內容,語法-->'mi xxxx',其中m爲行號,例如在第三行以前插入hello--> '3i hello'
a: 在某行以後插入內容,語法相似i-->'ma xxxx',其中m爲行號,例如在第三行以後插入nihao-->'3a nihao'
d: 刪除某些行,語法--> 'm,nd',其中m,n是行號,相似p中的定義,例如刪除2到5行-->'2,5d'
s: 替換行中的某些內容,語法--> 'm,ns/regEx/replace/[g]',其中m,n相似p中的定義,regEx是要被替換的內容,能夠是正則表達式,replace是要替換的內容,g代 表所有都要處理,若是沒有則只是替換從左到右的第一個匹配項
q/Q: 結束處理命令,後面的行將不會再處理。語法'q'。
n: 從流中讀取下一行到pattern space進行處理,後面的命令將會只會處理下一行。
N: 從流中讀取下一行擴展到pattern space一塊兒處理,後面的命令會一塊兒處理當前行和下一行。
w: 把當前的pattern space寫入文件,語法-->'w xxx',xxx表明文件名。
W: 把當前的pattern space第一行寫入文件,語法-->'w xxx',xxx表明文件名。
注意:sed是以行爲單位的流編輯器,因此命令每次都從流裏讀取一行放到模式空間(Pattern space),處理一行完了就會輸出模式空間的內容到屏幕(除非設置安 靜模式-n)並清理模式空間,再重複下一行,因此模式空間就像一個臨時工做緩存,以行爲單位。這裏還有一個緩存,叫保留空間(Hold space),這個緩存不會被 清除,能夠保存一些想被跨行共享的數據。它倆之間能夠相互轉存,經過如下命令
h H Copy/append pattern space to hold space. --> 拷貝/擴展 從模式空間到保留空間
g G Copy/append hold space to pattern space. --> 拷貝/擴展 從保留空間到模式空間
x Exchange the contents of the hold and pattern spaces. --> 相互交換內容