一、sed簡介
sed是一種流編編器,它是文本處理中非常中的工具,能夠完美的配合正則表達式便用,功物能不同凡響。
處理時,把當前處理的行存儲在臨時緩沖區中,稱為”模式空間”( oattern space),接看用sed命令處理緩沖區中的內容,處理成后,把緩沖區的內容送往屏幕顯示。
接着理下一行,這樣不斷重復,直到文件末。文件內容沒有改改變,除非使用了寫入的命令,將內容更新。
定址用於決定對哪些行進行編輯。地址的形式可以是數字、正則表達式、或二者的結合。如果沒有指定地址,sed將處理輸入文件的所有行。
二、sed命令功能
命令 功能
a\ 在當前行后添加一行或多行。多行時除最后一行外,每行末尾需用“\”續行
c\ 用此符號后的新文本替換當前行中的文本。多行時除最后一行外,每行末尾需用"\"續行
i\ 在當前行之前插入文本。多行時除最后一行外,每行末尾需用"\"續行
d 刪除行
h 把模式空間里的內容復制到暫存緩沖區
H 把模式空間里的內容追加到暫存緩沖區
g 把暫存緩沖區里的內容復制到模式空間,覆蓋原有的內容
G 把暫存緩沖區的內容追加到模式空間里,追加在原有內容的后面
l 列出非打印字符
p 打印行
n 讀入下一輸入行,並從下一條命令而不是第一條命令開始對其的處理
q 結束或退出sed
r 從文件中讀取輸入行
! 對所選行以外的所有行應用命令
s 用一個字符串替換另一個
g 在行內進行全局替換
w 將所選的行寫入文件
x 交換暫存緩沖區與模式空間的內容
y 將字符替換為另一字符(不能對正則表達式使用y命令)
三、sed常見命令參數
p:print
d:delete
=:打印匹配行的行號
-n 取消默認的完整輸出,只要需要的
-e 允許多項編輯
-i 修改文件內容
-r 不需要轉義
四、舉例sed常見用法
源文件如下:


1、只打印第三行文字
sed -n '3p' 123.txt


2、只查看文件的第3行到第9行
sed -n '3,9p' 123.txt


3、過濾特定字符串,顯示正行內容
sed -n '/222/p' 123.txt


4、打印1-5行,並顯示行號
sed -n -e '1,5p' -e '=' 123.txt


5、僅僅顯示匹配字符串的行號
sed -n '/5555/=' 123.txt


6、將‘1111’替換為‘1111第一行’
sed 's/1111111/11111第一行/g' 123.txt


注:-i命令才會真實生效
sed -i 's#222#222第二行#g' 123.txt


7、打印最后一行
sed -n '$p' 123.txt


8、在文件第一行添加start,文件結尾添加over
界面現實:sed -e '1i start' -e '$a over' 123.txt


真實寫入:
sed -i -e '1i start' -e '$a over' 123.txt


9、在文件第一行和第四行的每行下面添加helloworld
sed '1,4i helloworld' 123.txt


10、& 符號在sed命令中代表上次匹配的結果
sed 's/第二行/已經不是&/g' 123.txt


11、刪除第3到第9行,只是不顯示而已
sed '3,9d' 123.txt


12、刪除包含"start"的行到包含"999"的行之間的行
sed '/start/,'/999'/d' 123.txt


13、-e是編輯命令,用於多個編輯任務
打印1到2行的內容,並匹配‘第二行替換為'我是第三行了'
sed -e '1,2d' -e 's/第二行/我是第一行了/g' 123.txt


14、-r命令是讀命令。sed使用該命令將一個文本文件中的內容加到當前文件的特定位置上
sed '/3333/ r test002.txt' 123.txt
【123.ltxt 匹配root后讀入test002.txt的內容(helloworld123:)在匹配內容之下,僅顯示用】


15、-w是寫入命令
將【123.txt匹配root后寫入test002.txt',真實寫入,,添加-n參數后,不打印源文件】
sed '/第二行/ w test002.txt' 123.txt

16、sed的正則匹配
正則匹配IP和子網掩碼
ifconfig | sed -n '2p'


ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'(提取ID地址)


find . -name "*.txt" | xargs sed -i 's/第二行/第三行/g'(配合find命令使用:查找並替換)
