sed基本用法:
sed:stream editor,它是一個行編輯器,它並不編輯文件本身,它把符合條件的行讀入內存(模式空間),對其進行操作後顯示出來。
命令格式:
sed [option] 'adresscommand' file
option:
-n:不打印模式空間中的內容(靜默模式)
-i:直接修改原文件
-e:-e SCRIPTE -e SCRITE 可以同時執行多個腳本
-f filename or path:可以把腳本寫入文件 ,然後讀取執行操作
-r:表示使用正則表達式
Address:
startline,endline,比如1,100
/RegExp/, 比如/^root/,匹配以root開頭的行
/pattern1/,/pattern2/ 表示第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這之間所有行。
linenumber 指定的行
startLine,+N 表示從開始行向後的n行,一共n+1行。
command:
d:刪除 例:#sed "1,2d" /etc/fstab 刪除文件前兩行 $代表最後一行
sed "/oot/d" /etc/fstab 刪除文件中帶有oot的行
sed "1d" /etc/fstab 刪除第一行
p:顯示符合條件的行
例:sed "/^\//d" 刪除以/開頭的行
a:\string 在匹配的行後面追加新行,內容爲string
例:sed "/^\//a \heheda" /etc/fstab 在以/開頭的行後追加heheda
i:\string 在匹配的行前面插入新行,內容爲string
r FILE :把文件內容添加到符合條件的行處
例:sed "2r /etc/issue" /etc/fstab 在fstab第二行插入/etc/issue的內容
w FILE :把符合條件的行保存到另一個文件中
例:sed "/^1/w /hehe.txt" /etc/fstab 把開頭爲1的行另存爲至 、
s/pattern/string/:查找並替換,默認替換每行中第一次被模式匹配到的串,如果要全局替換,則要加修飾符:
修飾符:
-g :全局替換: 例: sed "s/hehe/haha/g" /etc/passwd
-i: 不區分大小寫
例:sed "s/hehe/haha/" /etc/passwd 把每行中第一次出現的hehe替換成haha
這裏的s///中的/可以爲三個任意想同字符:所以上面一句可以等價爲:
sed "s@hehe@haha@" /etc/passwd
例子1:
l..e: like-->liker
love-->lover
sed "s#l..e#&r#g" sed.txt
&:表示模式匹配到的整個串
也可以使用後向引用實現:
sed "s#\(1..e\)#\1r#g" sed.txt
有些時候只可以使用後向引用,而不能使用&
比如:like-->Like
love-->Love
sed "s#l\(..e\)#L\1#g" sed.txt #\1就是代表前面括起來的部分
例子2:
刪除文件行首的空白字符
sed "s/^[[:space:]]*//" sed.txt