1. 程式人生 > >Linux自學筆記——sed命令

Linux自學筆記——sed命令

linux sed


sed行編輯器:

sed是一種行編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時存儲區中,稱為“模式空間”,接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,知道文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出或者配合編輯選項使用。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。

sed用法:

sed - stream editor for filtering andtransforming text

sed - stream editor for filtering andtransforming text

常用選項:

-n:不輸出模式中的內容至屏幕;

技術分享

-e:多點編輯;

技術分享

-f /path/to/script_file:從指定文件中讀取編輯腳本;

技術分享

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

-i:原處編輯;

技術分享

地址定界:

1) 不給地址,對全文進行處理;

2) 單地址:

#:指定的行;

/pattern/:被此處模式所能夠匹配到的每一行;

3) 地址範圍

#,#:

#,+#:

/pat1/,/pat2/

#,/pat1/:

4) ~:步進

1~2

編輯命令:

d:刪除;

p:顯示模式空間中的內容;

a \text:在行後面追加文本;支持使用\n實現多行追加;

i \text:在行前面插入文本;支持使用\n實現多行插入;

c \text:替換行為單行或多行文本;

w /path/to/somefile:保存模式空間匹配到的行至指定文件中;

r /path/to/somefile:讀取指定文件的文本流至模式中匹配到的行的行後;

=:為模式空間中的行打印行號;

!:取反條件;

s///:支持使用其它分隔符,[email protected]@@,s###

替換標記:

g:行內全局替換;

p:顯示替換成功的行;

w /path/to/somefile:將替換成功的結果保存至指定文件中;

練習1:刪除/boot/grub/grub.cong文件中所有以空白開頭的行行首的空白字符

技術分享

練習2:刪除/etc/fstab文件中所有以#開頭,後面至少跟一個空白字符的行的行首的#和空白字符;

技術分享

練習3:echo一個絕對路徑給sed命令,取出其基名;取出其目錄名

技術分享

高級編輯命令:

h:把模式空間中的內容覆蓋至保持空間中;

H:把模式空間的內容追加至保持空間中;

g:從保持空間取出數據覆蓋至模式空間;

G:從保持空間取出數據追加至模式空間;

x:把模式空間中的內容與保持空間的內容進行互換;

n:讀取匹配到的行的下一行至模式空間;

N:追加匹配到的行的下一行至模式空間;

d:刪除模式空間中的行;

D:刪除多行模式空間中的所有行;

示例:

1. 在/tmp目錄下新建文件test.text,編輯文件內容如下;

技術分享

2. 打印偶數行:]# sed -n ‘n;p‘ test.text

技術分享

3. 逆向顯示文件內容:]# sed ‘1!G;h;$!d‘ test.text

技術分享

4. 取出文件後兩行:]# sed ‘$!N;$!D‘ test.text

技術分享

5. 取出文件最後一行:]# sed ‘$!d‘ test.text

技術分享

6. 將文件內容的每一行下面添一個空白行:]# sed ‘G‘ test.text

技術分享

7. 將文件中的空白行合並成一個,沒有空白行的之間添加空白行:]# sed ‘/^$/d;G‘ test.text

技術分享

8. 顯示奇數行:]# sed ‘n;d‘ test.text

技術分享

9. 逆向顯示文件中的每一行:

技術分享


Linux自學筆記——sed命令