sed命令——流編輯器

日期: 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文件中以#開頭的行

wKiom1YA4fnhQCN6AADex_-0sgQ016.jpg



示例2

刪除/etc/fstab文件中以第一個#開頭,至第一個/開頭的行

wKioL1YA5DmxvqokAADCbNUJUA0688.jpg



示例3

把/etc/inittab文件中 id:5:initdefault: 行中的數字5替換爲3

wKiom1YA4fqTZzOqAAI2FLMKa6Y212.jpg



示例4

刪除/etc/init.d/functions文件中行首的#號

wKioL1YA5DmxkBHkAAINsKf_tlI954.jpg


 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章