sed 是一種流編輯器,一次處理一行內容,處理時,把當前處理的行存儲在臨時緩衝區,稱為模式空間,接著用sed命令處理模式空間中的內容,處理完成後,把緩衝區的內容送往屏幕。然後讀入下行,執行下一個迴圈。 用法:sed [option]... 'script' inputfile... # :指定某行, ...
sed
是一種流編輯器,一次處理一行內容,處理時,把當前處理的行存儲在臨時緩衝區,稱為模式空間,接著用sed命令處理模式空間中的內容,處理完成後,把緩衝區的內容送往屏幕。然後讀入下行,執行下一個迴圈。
用法:sed [option]... 'script' inputfile...
# :指定某行,否則全文
/pattern/:被此處模式所能夠匹配到的每一行
#,#:指定範圍
#,+#:指定#行至#+N行
/pat1/,/pat2/
#,/pat1/
常用選項:
-n :不輸出模式空間內容到屏幕
-e :多點編輯
-f:/PATH/腳本文件 :從指定文件中讀取編輯腳本
-i.bak :備份原文件並編輯
-r :支持擴展正則表達式
d:刪除
sed '/^$/d' :刪除空白行
sed '1,10d' :刪除1-10行(多行參數之間可用-e多點編輯)
p:顯示模式空間中的內容
sed -n '1~2p' file :僅顯示奇數行
sed -n '2~2p' file :僅顯示偶數行
a [\]test :在指定行後追加文本,支持使用\n實現多行追加
sed '/root/a\superman' /etc/passwd :在包含root的行後一行追加superman
i [\]text :在行前插入文本
sed '/root/i\superman' /etc/passwd :在包含root的行前一行追加superman
c [\]text :替換行為單行或多行文本
sed '/root/c\superman' /etc/passwd :把包含root的行整行內容都替換為superman
w /path/file : 保存模式匹配的行至指定文件
r /path/file :讀取指定文件的文本至模式空間中匹配到的行後
= :為模式空間中的行列印行號
sed -n -e '/^$/p' -e '/^$/=' file :顯示空白行並列印空白行行號
! :取反
s/// s@@@ s### :查找替換
g :行內全局替換
p :顯示替換成功的行
w /PATH/file :將替換成功的行保存至文件中
高級編輯命令
h:把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g:從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x:把模式空間中的內容與保持空間中的內容進行互換
n:讀取匹配到的行的下一行覆蓋至模式空間
N:讀取匹配到的行的下一行追加至模式空間
d:刪除模式空間中的行
D:刪除多行模式空間中的所有行
示例:
1、刪除centos7系統/etc/grub2.cfg文件中所有以空白開頭的行行首的空白字元
sed /^[[:blank:]]/d' /etc/grub2.cfg
2、刪除/etc/fstab文件中所有以#開頭,後面至少跟一個空白字元的行的行首的#和空白字元
sed '/^#[[:blank:]]\+/d' /etc/fstab
3、在centos6系統/root/install.log每一行行首增加#號
sed -n 's/^/#&/p' /root/install.log
4、在/etc/fstab文件中不以#開頭的行的行首增加#號
sed 's/^[^#]/#&/' /etc/fstab
5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
目錄名:echo /etc/fstab |sed 's@[^/]\+$@@'
基名:echo /etc/fstab |sed s'@.*/@@'
6、利用sed 取出ifconfig命令中本機的IPv4地址
ifconfig |sed -n '/inet addr/p' |sed 's/^[[:blank:]]*inet addr://' |cut -d' ' -f1
ifconfig |sed -n '2p' |tr -s ' ' : |cut -d: -f4
7、統計centos安裝光碟中Package目錄下的所有rpm文件的以.分隔倒數第二個欄位的重覆次數
mount /dev/cdrom /mnt |ls /mnt/Packages/ |sed s'/.rpm//' |sed s'@.*[/.]@@' |sort |uniq -c
8、統計/etc/init.d/functions文件中每個單詞的出現次數,併排序
sed s'/[^[:alpha:]]/\n/g' /etc/init.d/functions |sort |uniq -c |sed '1d'
9、將文本文件的n和n+1行合併為一行,n為奇數行
sed 'N;s/\n//'