1. 程式人生 > >Linux20180427六周第二次課(4月26日)

Linux20180427六周第二次課(4月26日)

sed

六周第二次課(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日)