例五 給某些字串後面插入些內容
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing
London[rocrocket@rocrocket programming]$ sed ’s/B.*/&2008/’ mysed.txt
Beijing2008
London
這個命令的作用是將包含’B.*’的地方後面加上2008四個字元。這個命令裡用到了&字元,這是一個技巧,高手和菜鳥比,這些技巧很重要哦。&表示“被匹配的部分”,在這裡就是’Beijing’嘍!
例六 將行的第一個Beijing後加上2008,在最後一個Beijing後加上2008
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing Beijing Beijing Beijing
London London London London
[rocrocket@rocrocket programming]$ sed ’s//(Beijing/)/(.*/)/(Beijing/)//12008/2/32008/’ mysed.txt
Beijing2008 Beijing Beijing Beijing2008
London London London London
這個命令稍顯複雜,其中用到了一個技巧,就是預儲存,即被/(和/)括起來的匹配內容會被按順序儲存起來,儲存到/1、/2…裡面。這樣你就可以使用/加數字來調用這些內容了。這個例子就是使用了這個技巧,分別儲存了三個內容,分別為匹配Beijing、匹配.*和匹配Beijing。
你可能會問,我如果想在第一個t前加上M,在第二個t前加上N,怎麼做呢?
這個就需要使用Regex的非貪婪演算法了,一般是在?、+、*、{n}、{m,}、{m,n}的後面緊跟一個?,就會使匹配從貪婪演算法變成非貪婪算 法,但是遺憾的是,sed並不支援這種非貪婪演算法,所以我們無法使用sed實現這種想法,只能另尋其他工具了。這也算是sed的一個遺留問題吧。
例七 可以用模式來定位行範圍
[rocrocket@rocrocket programming]$ cat mysed.txt
Beijing 2003
Beijing 2004
Beijing 2005
Beijing 2006
Beijing 2007
Beijing 2008
Beijing 2007
[rocrocket@rocrocket programming]$ sed -n ‘/2005/,/2007/p’ mysed.txt
Beijing 2005
Beijing 2006
Beijing 2007
我們使用/2005/來匹配行範圍的首行,用/2008/來匹配行範圍的最尾行。可以看到,在匹配尾行時,只要遇到符合要求的行,即停止,不會再繼續向後匹配了。(只是匹配到第一個2007,並沒有匹配到第二個2007)
例八 用-e選項來設定多個command
還記得command部分吧,現在我告訴你,sed命令可以包含不只一個的command,但是當包含超過一個的command的時候,必須在每個command前面加上選項-e。
[rocrocket@rocrocket programming]$ sed -n -e ‘1,2p’ -e ‘4p’ mysed.txt
Beijing 2003
Beijing 2004
Beijing 2006
雖然這個例子看似是為了使用-e而使用-e,但是-e在有些時候是很有用的。相信我,呵呵:)
記住,-e後面必須立即接command,不允許再夾雜其他的選項了。
例九 可以使用-f來設定包含command的檔案名稱
如果你的command很長,那麼可以將其寫在檔案裡,然後使用-f來設定這個檔案作為command部分:
[rocrocket@rocrocket programming]$ cat callsed
/2004/,/2006/p
[rocrocket@rocrocket programming]$ sed -n -f callsed mysed.txt
Beijing 2004
Beijing 2005
Beijing 2006
兩個命令就講清楚了-f的用法。相信你能看懂。