sed基本用法:git
sed: Stream Editor 行編輯器,同vi編輯器不同的是,vi編輯器是全屏編輯器。
正則表達式
sed:模式空間編輯器
默認不編輯原文件,僅對模式空間中的數據作處理;然後,處理結束後,將模式空間打印至屏幕;
spa
sed [options] 'AddressCommand' file...ip
-n:靜默模式,不在默認顯示模式空間中的內容字符串
-i:直接修改原始文件string
-e SCRIPT -e SCRIPT:能夠同時執行多個腳本it
-f /PATH/TO/SED_SCRIPT io
sed -f /path/to/scripts file
擴展
-r 表示使用擴展正則表達式
關於Address的說明:
StartLine,EndLine 好比1,100 $:最後一行
/RegExp/ /^root/
/pattern1/,/pattern2/ 第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的全部行
lineNumber:指定的行
StartLine,+N 從startline開始,向後的N行。
關於Command的說明:
d: 刪除符合條件的行
p: 顯示符合條件的行
a \String :在指定的行後面追加新行,內容爲string
i \String :在指定的行前面添加新行,內容爲string
r FILE:將指定的文件的內容添加至符合條件的行處
w FILE : 將地址指定的範圍內的行另存爲指定的文件中
s/pattern/string/修飾符 :查找並替換,默認只替換每行中第一次被模式匹配到的字符串
加修飾符: g:全局替換 i:忽略字符大小寫
其實 s///,s###,s@@@都是同樣的, \(\) ,\1,\2
&:引用模式匹配整個串。
練習:
刪除/etc/grub.conf文件中行首的空白符
sed -r 's/^[[:space:]]+//g' /etc/grub.conf
替換/etc/inittab文件中「id:3:initdefault:」一行中的數字爲5
sed -r 's#^\(id:\):[[:digit:]]\(:initdefault:\)#\15\2#g'
刪除/etc/inittab文件中的空白行
sed -r '/^$/d' /etc/inittab
刪除/etc/inittab文件中開頭的#號
sed -r 's/^#//g' /etc/inittab
刪除某文件(/etc/inittab)中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符
sed -r 's/^#[[:space:]]+//g' /etc/inittab
取出一個文件路徑的目錄名稱
sed -r 's@^(/.*/)[^/]+/?@\1@g'
取出一個文件路徑的文件名稱
sed -r 's@^/.*/([^/]+)/?@\1@g'