sed:全稱stream EDit 行文本編輯器
作用:是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在模式空間,接著用 sed命令處理緩沖區中的內容,處理完成后,把模式空間的內容輸出到標準輸出。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。 Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。
sed兩種存貯空間
模式空間:為處理文件中一行內容的一個臨時緩沖區。處理完一行之后就會把模式空間中的內容打印到標準輸出,然后自動清空緩存。
保存空間:sed中的另外一個緩沖區,此緩沖區正如其名,不會自動清空,但也不會主動把此緩沖區中的內容打印到標準輸出中。
用法:sed [option] … script inputfil
option:
– n:不輸出模式空間內容的自動打印
– e: 多點編輯(用法sed -e script -e script)
– f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本
– r: 支持使用擴展正則表達式
-i: 原處編輯(將原文件進行修改),保存原文的辦法 -i.bak 會將原文的備份成.bak文件再進行修改
script:
地址命令:
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
n: 指定的行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
n,m:n到m行進行處理
n,+m:n到n+m行
/pat1/,/pat2/:從第一次匹配pat1的行到到第一次匹配pat2的行
#,/pat1/
(4) ~:步進
1~2 奇數行
2~2 偶數行
編輯命令:
d:刪除模式匹配的行
p:顯示模式空間中的內容
a \text:z在文件的后面追加文本,支持\n多行追加
-i \text:在文本的前面追加內容,支持\n多行追加
c \test:將匹配行的內容替換為test
w :保存匹配的行到指定路徑
r:讀取文件到指定行的行尾
=:為模式匹配的行打印行號
!:匹配模式空間的行取反
sed命令之查找替換
格式:s@查找內容@替換內容@替換標記 或s///或者s###
替換標記:g全局查找并替換
p:結合-n使用,顯示打印替換成功的行
w:將替換成功的行保存到文件
sed 命令之高級編輯命令
h:把模式空間的內容覆蓋到保存空間
H:把模式空間的內容追加到保存空間
g:把保存空間的內容覆蓋到模式空間
G:把保存空間的內容追加到模式空間
x:模式空間和保存空間的內容互換
n: 讀取匹配到的行的下一行覆蓋至模式空間
N:追加匹配到的行的下一行至模式空間
d: 刪除模式空間中的行
D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed
sed用法高級編輯舉例:
一、只打印偶數行
二、利用sed實現tac命令功能,將文章倒敘打印出來
三、只輸出最后兩行
四、只打印最后一行
[#52#root@centos6 /testdir]#sed '$!d' f1
五、在每行后面添加空行
六、清空文件內容
七、將每個偶數行打印兩次
sed "n;p" 文件名
sed 用法練習:
一、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符
二、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
三、在/etc/passwd每一行行首增加#號
四、在/etc/fstab文件中不以#開頭的行的行首增加#號
五、保留/etc/fastab文件中包含#號的行,不包含的刪除
六、處理/etc/fstab路徑,使用 sed命令取出其目錄名和基名
七、利用 sed 取出 ifconfig命令中本機的IPv4地址
八、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數
原創文章,作者:wangnannan,如若轉載,請注明出處:http://www.www58058.com/33220
文章內容飽滿。圖文結合精密,對sed的工作原理可以嘗試著通過畫圖來展示給用戶,這樣會更直觀明了。