sed命令是流編輯器。
工作流程是:每次將相應的行==》模式空間(內存中)==》模式匹配在處理==》將模式空間裏的內容輸出到屏幕。
注:sed命令默認不處理原數據,而是處理原數據的副本。
用法
格式:sed ‘AddressCommand’ file
對指定文件中符合Address(地址篩選的行)進行Command(命令處理)
Address支持的用法:
1,起始行,結束行。例‘1,,100’(1到100行)
2,/正則匹配/ 支持正則模式匹配。裏‘/^root/’(以root爲行首的行)
3,/正則匹配1/,/正則匹配2/ 表示被模1式匹配到的行開始到被模式2匹配到的行
4,行號 精確匹配到某行,$表示最後一行。例‘1’(第一行)
5,起始行,+n 從起始行開始,到之後的N行
Command用法:
d:刪除符合條件的行。 例 sed '1,2d' /etc/passwd(刪除/etc/passwd中的第一到第二行) sed '/^root/d' /etc/passwd(刪除/etc/passwd中root爲行首的行) sed '/^\//d' /etc/passwd(刪除etc/passwd中/開頭的行,\爲轉意) p:顯示符合條件的行。例 sed '/^\//p' /etc/passwd(顯示etc/passwd中/開頭的行)
a(apend) /string:在指定的行後追加字符串string新行,\n表示換行
i(insert) /string:在指定的前插入字符串string新行,\n表示換行
r file:將指定的文件的內容添加至符合條件的行處
w file:將指定的範圍內的內容另存(會保存)到指定的文件中
s 查找並替換:將匹配到的內容進行替換
用法 sed 's/查找內容(支持正則)/替換內容(字符串,不支持正則)/修飾符'file 。在每行中默認只替換在該行中第一次匹配到的內容。
修飾符:g 全局替換。i 忽略大小寫。
注:在s命令中,只要三個分割符一樣,大部分符號都可以作爲分隔符,這樣可以在匹配衝突時換分隔符避免使用轉移符
例:sed 's#\(l..e\)#\1r#g' 文件名。或 sed 's#l..e#$r#g' 文件名
$:爲引用模式匹配的所有內容。
$與後向引用的差別:只引用匹配內容中的一部分內容是,只能用後向引用。
例: sed 's#l\(..e\)#L\1#g' 文件名
sed命令選項:
-h:禁默模式,不在顯示模式空間的內容
-i:直接修改原文件
-e:同時執行多個腳本 -e 地址命令 -e 地址命令 ...
-f 指定文件:sed -f /path/scripts file 表示腳本里的內容出來文件
-r:支持擴展正則