日期: 2015年09月15日
Sed命令:Stream Editor (流編輯器/行編輯器)
讀取文件時把文件所有內容加載至內核緩衝區中,一次只處理一行數據。
工作機制:
sed命令默認並不是直接編輯磁盤上文件本身的內容,而是由內核把文件加載至內存中(緩衝區),sed命令
自身在內部維護着一個內核存儲空間,稱爲"模式空間"(pattern space)它會從內核緩衝區中一次加載
一行內容進來,在此空間內完成編輯,並把編輯的結果輸出到屏幕上。
語法:
sed [OPTION]... {script} [input-file]...
sed [options] 'addr1[,addr2]編輯命令' FILE...
sed [options] "addr1[,addr2]編輯命令" FILE...
選項:
-n 靜默模式,不輸出模式空間中的內容
-r: 支持擴展正則表達式;
-e 'script1' -e 'script2' -e 'script3':指定多腳本運行;
-f /path/to/script_file:從指定的文件中讀取腳本並運行;
-i: 直接修改源文件;
編輯命令:
d 刪除
p 打印
\n 換行
i \char 在被模式匹配到的行的前一行插入內容
a \char 在被模式匹配到的行的後一行插入內容
r /PATH/TO/FILE 在指定位置把另外一個文件的內容插入進來
w /PATH/TO/FILE 將符合條件的所有行保存至指定的文件中
= 顯示符合條件的行的行號
s/// 查找條件可以使用模式,但要替換的內容不行
sed命令另一個稱作"hold space"的內存空間
高級命令:
h 用模式空間中的內容覆蓋保持空間的內容;
H 把模式空間中的內容追加至保持空間中內容的後面;
g 從保持空間中取到其內容,並將其覆蓋模式空間中的內容;
G 從保持空間中取到其內容,並將其追加在模式空間中的內容的後面;
x 把保持空間和模式空間中的進行交換;
n 讀取匹配到的行的下一行至模式空間;(會覆蓋模式空間中的原有內容);
N 讀取匹配到的行的下一行至模式空間,追加在模式空間中原有內容的後面;
d 刪除模式空間中的內容;
D 刪除多行模式空間中的首行;
地址定界:
n 數字直接指定行
$ 最後一行
/regexp/ 任何能夠被/regexp/所匹配到的行
startline,endline
1,3
#,/regexp/ 從#行開始,到第一次被/regexp/所匹配到的行結束,中間的所有行
/regexp1/,/regexp2/:從第一次被/regexp1/匹配到的行開始,到第一次被/regexp2/匹配到的行結束,中間的所有行
#,+n 從#行開始,一直到向下的n行
★注意:模式一定要在寫在 '/ /' 之內
★注意:命令功能可使用!對地址定界進行取反;分號可用於分隔腳本
sed '地址定界s@查找條件@替換文件@'
修飾符:
g global,全局替換
i ignore-case,不區分字符大小寫
示例1:
刪除/etc/fstab文件中以#開頭的行
示例2:
刪除/etc/fstab文件中以第一個#開頭,至第一個/開頭的行
示例3:
把/etc/inittab文件中 id:5:initdefault: 行中的數字5替換爲3
示例4:
刪除/etc/init.d/functions文件中行首的#號