1.sed運行原理
sed(stream editor)是一個行處理器。處理時,把當前處理的行放到“模式空間中”,處理完畢后,把該行輸出到屏幕,接著處理下一行;這樣不斷重復,直到末行;此時文件本身內容并沒有改變
2.sed用途
自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序
3.sed命令用法詳解
(1)sed [option].. 'script' file..
常用選項 -n 靜默模式,不輸出模式空間內容
-r 支持擴展正則表達式
-e 多點編輯
-f 從指定文件讀取編輯腳本
-i 原處編輯,改變文件本身內容
實例:a文件原本內容如下
用sed使其顯示第一行,并在第二行前插入‘this is a test’
(2)script格式:
位置界定編輯命令
a.地址界定
A不給地址,對全文界定
B單地址:
# :指定的行
/pattern/:被模式匹配的沒一行
C地址范圍:
#1,#2:從#1行到#2行
#1,+#2:從#1行開始,往下再匹配#2行
/pat1/,/pat2/:從第一次匹配到pat1的行到第一次匹配到pat2的行
#,/pat/:從#行到第一次匹配到pat的行
D~:步進
1~2: 奇數行
2~2: 偶數行
b.常見的編輯命令
p 顯示匹配到的行
d刪除匹配到的行
i\text在匹配行的前邊插入文本,加上\n,支持多行插入
a\text在匹配行的下邊追加文本,加上\n,支持多行追加
c\text把匹配行換為單行或多行文本
=為模式空間中的行打印行號
!模式空間匹配行取反處理
r file讀取指定文件到匹配行的后邊
w file保存匹配行到指定文件
s///查找替換,支持使用其它分隔符:s@@@ ,s###
替換標記:
g;行內全局替換
p:顯示替換成功的行
w /path/to/somefile:就替換成功的行保存到文件中
實例一:在a文件第二行后邊追加兩行文本
實例二:處理b文件,以/^1/到/^4/行不輸出,然后把內容保存到/root/b文件下
c.高級編輯命令
d:刪除當前空間模式的行
D:刪除當前模式空間開端到\n的內容(不標準輸出),但剩余標準空間繼續執行sed
g:把保存空間內容覆蓋到模式空間
G:把保存空間內容追加到模式空間
h:把模式空間內容覆蓋到保存空間
H:把模式空間內容追加到保存空間
n:讀取匹配到的行的下一行覆蓋到模式空間
N:讀取匹配到的行的下一行追加到模式空間
x:模式空間和保存空間內容互換
實例解析:本實驗還是以a文件為實驗文件,a文件內容如下
1.sed -n 'n;p' a:顯示的是偶數行
分析:‘-n’靜默模式,默認不輸出;‘n;p’里的n的作用是把匹配到的行的下一行覆蓋到模式空間,p是輸出到屏幕;當把第一行內容匹配進模式空間時,第二行會把第一行覆蓋掉,結果顯示的是第二行,然后處理第三行,顯示第四行內容,依次類推,直到行末。
2.sed '$!N;$!D' a 只讀取最后兩行
分析:‘$!N’意思是當不是最后一行時,讀取匹配到的行的下一行追加到模式空間;
‘$!D’意思為當不是最后一行時,刪除當前模式空間內容開始到/n結束,其余繼續接受sed處理
課后作業
1,刪除/etc/grub.conf中所有以空白開頭的行行首全部空白字符
2.刪除/etc/fstab中以#開頭,且后邊至少跟一個空白字符的行的行首的#和空白字符
3.在/root/install.log每行行首添加#
4.在/etc/fstab中不以#開頭的行行首加上#
5.處理/etc/fstab,分別取出其目錄名與基名
6.用sed取出本機ipv4
7.統計centos安裝光盤里Package目錄下所有rpm文件以.分割的倒數第二個字段重復次數
(1)先查看光盤掛載在哪里
(2)
原創文章,作者:mengzhiqian,如若轉載,請注明出處:http://www.www58058.com/32490