簡介
sed 是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。
一 sed
sed: Stream EDitor, 行編輯器;
用法:
sed [option]… 'script' inputfile…
常用選項:
-n:不輸出模式中的內容至屏幕;
-e: 多點編輯;
-f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本;
-r: 支持使用擴展正則表達式;
-i: 原處編輯;
地址定界:
(1) 不給地址:對全文進行處理;
(2) 單地址:
#: 指定的行;
/pattern/:被此處模式所能夠匹配到的每一行;
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進
1~2
2~2
編輯命令:
d: 刪除
p: 顯示模式空間中的內容
a \text:在行后面追加文本;支持使用\n實現多行追加;
i \text:在行前面插入文本;支持使用\n實現多行插入;
c \text:替換行為單行或多行文本;
w /path/to/somefile: 保存模式空間匹配到的行至指定文件中;
r /path/from/somefile:讀取指定文件的文本流至模式空間中匹配到的行的行后;
=: 為模式空間中的行打印行號;
!: 取反條件;
s///:支持使用其它分隔符,s@@@,s###;
替換標記:
g: 行內全局替換;
p: 顯示替換成功的行;
w /PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;
示例1:再test.txt文件中cat替換了linux
sed 's/linux/cat/' test
示例2: 在命令行使用多個編輯器命令
sed -e 's/linux/cat/; s/is/hello/' test.txt
示例3:從文件中讀取編輯器命令,有大量的要處理的sed命令,將他們放在一個文件中,可以在sed -f 選項來指定文件,本例放在了script
sed -f script test.txt
示例4:顯示被命令修改過的行
sed -n 's/test/cat/p' test2.txt
示例5:數字方式的行尋址,修改2至3行
sed '2,3s/linux/cat/' test.txt
示例6: 刪除2至3行
sed '2,3d' test.txt
示例7: 新行插入到數據流中第三行后面的例子
sed '3a\hello word' test.txt
示例8:修改第三行中的文本
sed '3c\hello word' test.txt
示例9:刪除除/boot/grub/grub.conf文件中所有以空白開頭的行行首的空白字符;
sed 's@^[[:space:]]\+@@' /boot/grub/grub.conf
示例10:刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符;
sed 's@^#[[:space:]]\+?@@' /etc/fstab
示例11:echo一個絕對路徑給sed命令,取出其基名;取出其目錄名
echo "/etc/sysconfig/" | sed 's@[^/]\+/\?$@@'
高級編輯命令:
h: 把模式空間中的內容覆蓋至保持空間中;
H:把模式空間中的內容追加至保持空間中;
g: 從保持空間取出數據覆蓋至模式空間;
G:從保持空間取出內容追加至模式空間;
x: 把模式空間中的內容與保持空間中的內容進行互換;
n: 讀取匹配到的行的下一行至模式空間;
N:追加匹配到的行的下一行至模式空間;
d: 刪除模式空間中的行;
D:刪除多行模式空間中的所有行;
示例12:顯示test3.txt文件中的偶數行
sed -n 'n;p' test3.txt
示例13:逆向顯示test3.txt文件中的內容
sed '1!G;h;$!d' test3.txt
示例14:取出test3.txt 文件中的最后2行
sed '$!N;$!D' test3.txt
示例15:取出test3.txt 文件中的最后一行
sed '$!d' test3.txt
示例16:顯示test3.txt 中的奇數行
sed 'n;d' test3.txt
原創文章,作者:liangkai,如若轉載,請注明出處:http://www.www58058.com/12061