Linux20180427六周第二次課(4月26日)
9.4/9.5 sed
sed -n '/關鍵字/'p 文件名
支持 . * +(脫義),如果不想脫義的話,可以使用-r選項
其他的也都是可以匹配的,只是稍微麻煩。
如果想用sed打印指定的行
sed -n '2'p passwd
打印第二行
sed -n '2,5'p passwd
打印2-5行
sed -n '2,$'p passwd
打印第二行到最後一行
sed -n '1,$'p passwd
打印全部的行
-e表示可以同時執行多條匹配
sed -e '1'p -e '/root/'p -e '/oo*/'p passwd
相當於把三個條件滿足的都打印出來
另外sed也可以大小寫全部打印出來,在p前面加上一個I 大寫的I
sed -n '/bus/'Ip passwd
sed還有一個作用是顯示剩余的行,sed '要刪除的行'd filename
sed '1,10'd test,txt
的意思就是打印刪除10行後剩余的內容
當然也可以按照關鍵字所在的行刪除顯示剩余的。 比如查看非root所在行。可以 sed '/root/'d passwd
sed 有一個真正刪除的選項 -i 真的會把內容進行更改
sed -i‘行'd filename
除了按照行號來刪以外還可以按照關鍵字所在的行來刪。
sed -i '/zt/'d passwd 是將含有root的那一行刪掉
當然sed最重要的功能是查找替換
sed '1,10s/home/lovebay/g' passwd1
1-10行 home換成 lovebay g代表全局
sed替換也支持正則。
sed -r '1,5/lov+/my/g' passwd1 記住要有一個選項 -r
下面這個替換是將第一位和最後以為進行了互換位置
sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' [^:]非:開頭 (.*):一直匹配到最後一個:的位置 最後也是一個非:開頭 然後後面跟的是位置
如果有/的時候要脫義 \ 或者有其他的符號作為分割符比如@#
head passwd1 |sed 's/\/bin\/bash/123/g'
head passwd1 |sed 's@\/bin\/bash@123@g'
如果是想把所有的英文字母刪掉
head passwd1 | sed 's/[a-zA-Z]//g' 這個比較好理解
如果想在每一行前面加上aaa如何辦?
兩個辦法,第一個辦法是\1這個位置符前面加東西
head passwd1 | sed -r 's/(.*)/aaa:\1/'
或者是用&表示前面括號裏的內容
Linux20180427六周第二次課(4月26日)