1、sed工作原理
sed(stream editor)是一種流編輯器,本身也是一個管道命令,可以分析編輯標準輸入(standard input),包括對數據進行替換、刪除、新增、選取特定行等等。運行時以行為單位,每次只處理一行的內容,因此它又被稱為行編輯器。sed還可與正則表達式配合使用,從而簡化文件的反復操作。
sed在整個指令執行中,被編輯的文件本身內容并沒有被改變(除非加入-i選項),因為sed在執行指令前,會先把文件中要處理的行臨時調到其緩存中,這個緩存被稱為“模式空間(pattern space)”,然后再執行相關的指令,并將處理的結果輸出到標準的輸出設備中(如屏幕),接著繼續處理下一行,如此反復直到最后一行。但是有時候輸入的指令較為復雜,該行只處理一次并不能達到指令要的結果,需要進行其他的處理,那么怎么辦呢?這時就需要應用到保持空間(hold space),所謂保持空間就是臨時存放還沒有處理完的行的地方,在后續的處理中保持空間的內容會被再次調入模式空間處理,直至指令完成。打個比方,模式空間相當于加工車間,而保持空間相當于倉庫,在加工時由于謀道工序缺料,需要臨時把未加工完的半成品存放起來,而這個倉庫就是用來保存加工車間還未完工的半成品的。
2、語法
sed [OPTION]... ‘script’ [input-file]... 注意:script由地址定界和編輯命令組成
3、常用選項
-n:靜默模式,即不顯示模式空間的標準輸出內容,默認是顯示的 -e:多點編輯,即指定多個script運行 如:刪除/etc/fstab文件中以#和UUID開頭的行
-f:從指定的文件中讀取腳本并編輯 -r:支持擴展的正則表達式,默認是支持基本正則表達式 -i:直接修改源文件(注意原文件的備份)
4、地址定界
(1)不給地址(空地址):
對全文內容進行處理
(2)單地址:
n:指定第幾行 $:表示最后一行 /pattern/:被模式匹配到的所有行,比如:sed -n '/root/p' /etc/passwd
(3)范圍地址:
n,+m:第n行到再加上m行之間的內容,如:3,+5表示從第3行到第8行的內容 n,m:表示第n行到第m行的內容 n,/pattern1/:表示從第n行到第一次被模式1匹配到的行之間的內容 /pattern1/,/pattern2/:表示第一次被模式1匹配到的行到第一次被模式2匹配到的行之間的內容 如:sed -n '/^root/,/^adm/p' /etc/passwd
(4)步進(~):
1~2:表示所有奇數行 2~2:表示所有偶數行
5、基本編輯命令
d:刪除模式空間的內容 p:顯示模式空間的內容,若不加-n選項,則會顯示匹配的內容兩次 a\text:在匹配到的行下面追加文本“\text”,支持轉義字符\n來實現多行追加 如:sed '/root/a \magedu.com' /etc/passwd
i\text:在匹配到的行上面追加文本“\text”,支持轉義字符\n來實現多行追加 如:sed '2i \magedu.com\nhomework' /etc/passwd
c\text:把匹配到的行替換為指定的文本“\text” 如:sed '/^UUID/c \uuid=this is a test' /etc/fsta w /PATH/TO/SOMEFILE:把模式空間中匹配到的行保存到指定文件中 如:sed -n '/root/w /tmp/user.txt' /etc/passwd
r:讀取指定文件的內容到當前模式匹配到的行下面 如:sed '/root/r /etc/issue' /etc/passwd
=:給匹配到的行添加行號 如:sed '/^UUID/=' /etc/fstab
!:條件取反,其位置為“地址定界!編輯命令”。 s///:查找替換,分隔符“///”可以自行指定,比如s@@@,s#### 替換標記選項: g:全局替換 p:顯示替換成功的行 w:將替換成功的行保存至指定文件中 如:sed -n 's@^UUID.*@hello,good man!@w /testdir/tihuan.txt' /etc/fstab
&:添加字符到已匹配到的字符前或后 如:[root@localhost ~]# sed 's@UUID@&hi@g' /etc/fstab:在UUID后添加hi
[root@localhost ~]# sed 's@UUID@hi&@g' /etc/fstab:在UUID前添加hi
6、高級編輯命令
h:把模式空間的內容覆蓋至保存空間 H:把模式空間的內容追加至保持空間 g:把保持空間的內容覆蓋至模式空間 G:把保持空間的內容追加至模式空間 n:把匹配到的行的下一行覆蓋至模式空間 N:把匹配到的行的下一行追加至模式空間 x:把模式空間的內容與保持空間的內容互換 d:刪除模式空間的行(單行) D:刪除模式空間的所有行
7、例題(截圖僅是顯示結果的一部分 )
(1)顯示/etc/passwd文件的偶數行
(2)逆序顯示/etc/passwd文件內容
(3)顯示/etc/passwd文件的最后兩行
(4)給文件/etc/passwd每行都添加一個空行
原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/32676