sed是善于處理行的,善于處理文本中的一行一行又一行!
說一下簡單的sed的知識:
sed的基本原理: 首先把文本中的内容,拿到記憶體中的模式空間去一行一行的做比較,比較完後,将模式空間裡剩下的内容做出顯示,輸出到螢幕上。
是以,原理上,sed不會對文本内容本身做改變。
幾個簡單指令:
# sed '1,2d' 1.txt //删除1.txt文本中的第1行到第2行。
# sed '1,$d' 1.txt //删除第1行到最後一行,$d代表最後一行,1和$之間有逗号。
# sed '1,+2d' 1.txt //删除第1行後,再删除2行。
# sed '/^\//d' 1.txt //删除首字母是“/”開頭的行!“^”這個符号,在鍵盤的阿拉伯數字6
的上面,代表以什麼什麼開頭。 “\”,這個我們叫做反斜線,這 個可以去掉“/”的特殊含義,恢複它的字面含義。
====================================================================
#sed '1p' 1.txt //列印第1行
#sed -n '1p' 1.txt //比較和 sed '1p' 1.txt有什麼不同,-n的意思是靜默模式,所謂靜默,
就是隻顯示出你想要的東西,其他的東西不會輸出,我想你會喜歡這個 -n這個選項。
# sed '/^\//a hello world' 1.txt // -a這個選項是追加,append,英語好的同學,直接man sed就行
英語不太好的同學,就記住吧,或者百度,最好記在腦子裡。
這句話的意思是,在首字母為“/”的後面追加hello world.
# sed '/^\//a hello linux' 1.txt //-i也是追加,在首字母是“/”的前面追加hello linux
=====================================================================
#sed 's#root#ROOT#g' 1.txt //作用是把root變成ROOT,而且是全局替換,g是global,全局的
意思,s 是替換的意思。
小注: #sed 's#root#ROOT#g' 1.txt 等于 #sed 's/root/ROOT/g' 等于 #sed 's*root*ROOT*g' ,隻要是3個相同的字母就可以。
======================================================================
後向引用,自己看看,自己敲敲,琢磨琢磨,不難:
#sed 's#\(root\)#\1R#g' 1.txt //這個“\1”的意思就是代表前面的root,在後面多一個R.
#sed 's#\(root\)#&R#g' 1.txt //這個&的作用也是代表前面的root.
#sed -E 's#r(oot)#R\1#g' //-E的作用是代表了“\”,有了-E,就不用反斜線“\”了
自己動手敲,敲出來的感覺,不需要我多解釋。
=======================================================================
#sed -e '1d' '2p' 1.txt //-e 的作用是執行了1d,然後可以繼續執行2p. 一次性執行多個指令
#sed -i '/\/root/a' 1.txt //-i 不能亂用,慎用!!!這個-i直接給改變原來的檔案,你自己
沒有掌握好的情況下,建議你慎用!
sed 還有很多用法,你可以去百度,可以去man,自己查詢,我這裡隻說了一些常用、常見的用法,東西看上去好像不少,實際上東西不多,對于初學者,我建議,大量的練習,練習,練習,沒有好的方法,熟能生巧。想想上一年級的時候學習漢字,就是一個漢字寫10遍,甚至更多,所有對于sed而言,你可以試一試不斷練習的方法。方法僅供參考! 對于聰明同學而言,不多說!
本文轉自 曾國藩_6868 51CTO部落格,原文連結:http://blog.51cto.com/8184069/1708756