linux之sed

Sed基本用法

SedStream Editor

行編輯器 (全屏編輯器:vi

模式空間

sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作。


語法:

sed [options]  AddressCommand  file...


Option選項

-n :靜默模式。 不顯示模式空間,不再默認顯示模式空間中的內容。

-i : 可以修改源文件

-e:支持同時多個操作

-f: 指定文件讀取(script腳本)

-r:使用擴展正則表達式


Address: 地址定界

1.startLine,EndLine

比如1,100

2.使用模式  /RegExp/

/^root/

3./pattern/,/pattern/

第一次被pattern匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的所有行。

4.Linenumber

精確的行

最後一行 $

倒數第二行 $ - 1

5.StartLine,+N

startLine開始,向後N


 Command

刪除:d命令  

$ sed '2d' example-----刪除example文件的第二行。  

$ sed '2,$d' example-----刪除example文件的第二行到末尾所有行。  

$ sed '$d' example-----刪除example文件的最後一行。  

$ sed '/test/'d example-----刪除example文件所有包含test的行。

顯示:p命令:

顯示符合條件的行

sed /^\//p /etc/fstab

新增:a命令

在指定的行後面追加新行,內容爲指定的字符串。 \n 換行

sed /^\//a \# hello world /etc/fstab

sed /^\//a \# hello world\n#hello,linux  /etc/fstab


         i 命令

在指定的行前面追加新行,內容爲指定的字符串。

         r命令

將指定的文件內容添加到符合條件的行處。

sed 2r /etc/issue /etc/fstab

sed 1,2r /etc/issue /etc/fstab


    w命令

將指定範圍內的內容另存只指定的文件中。

sed -n  /oot/w /tmp/oot.txt /etc/fstab


替換:s命令  

s/pattern/string/修飾符   默認只替換每行中第一次被模式匹配到的串。

修飾符  -g  全局替換

-i  查找時忽略字母大小寫

$ sed 's/test/mytest/g' example

-----在整行範圍內把test替換爲mytest。如果沒有g標記,則只有每行第一個匹配test被替換成mytest。  

$ sed -n 's/^test/mytest/p' example

-----(-n)選項和p標誌一起使用表示只打印那些發生替換的行。也就是說,如果某一行開頭的test被替換成mytest,就打印它。  

$ sed 's/^192.168.0.1/&localhost/' example

-----&符號表示替換換字符串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost。  

$ sed -n 's/\(love\)able/\1rs/p' example

-----love被標記爲1,所有loveable會被替換成lovers,而且替換的行會被打印出來。  

$ sed 's#10#100#g' example

-----不論什麼字符,緊跟着s命令的都被認爲是新的分隔符,所以,“#”在這裏是分隔符,代替了默認的“/”分隔符。表示把所有10替換成100。  

或者也可用@


只能用後項引用,而不能使用&的場合:

sed s#l\(..e\)#L\1#g sed.txt     說明:like----->Like



Sed練習

1.刪除/etc/grub.conf文件中行首的空白符。

sed -r s@^[[:space:]]+@@g /etc/grub.conf

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

sed s@\(id:\)[0-9]\(:initfault:\)@\15\2@g /etc/inittab

3.刪除/etc/inittab文件中的空白行

sed /^$/d /etc/inittab

4.刪除/etc/inittab文件開頭的#

sed s@^#@@g  /etc/inittab

5.刪除某文件中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符。

sed -r s@^#[[:space:]]+@@g /etc/inittab

6.刪除某文件中意空白字符後面跟#類的行中的開頭的空白字符及#

sed -r s@^[[:space:]]+#@@g /etc/inittab

7.取出一個文件路徑的目錄名稱;

目錄名:echo /etc/rc.d | sed -r s@^(/.*/)[^/]+/?@\1@g

基名:echo /etc/rc.d | sed -r s@^/.*/([^/]+)/?@\1@g


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