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命令