#Get sed savvy – part 1#
今天我將繼續介紹命令行工具,主題是sed。(Stream EDitor)是目前介紹過最複雜的工具,它自成一體。把他們放在一篇裡面會太擁擠,所以我會分開介紹。
sed的精華是檢索和替換,所以我們將從這裡開始,然後延伸到其他。
##教程##
如果你在Win平台上的話,請安裝Crywin或者類似的工具。sed也使用正則式,所以你可能需要一個正則式的手冊。
“sed一行行地有序讀取數據,調取命令,然後一行行地輸出”
sed 's/#FF0000/#0000FF/g' main.css
我們可以這樣理解:在main.css裡全局[/g]搜索[s/]紅色[#FF0000/],然後用藍色替代[#0000FF]。注意兩點:
-
sed並沒有修改文件,只是在屏幕上輸出結果;
-
如果我們不使用"g",那麼sed只會替換第一個匹配結果。
所以我們可以這樣來修改:
sed -i -r 's/#(FF0000|F00)b/#0F0/g' main.css
可以從前面那個find教程中找到這個例子:在css文件中用綠色替換紅色。-r選項是提供額外的正則式輔助。Sheila在find那個帖子的回覆中指出,sed的-i在Solaris系統上無效,所以她建議用類似
perl -e s///g -i
來替代。
假設我們要更改所有的顏色設置,可能最佳方式就是使用類似這樣的sed腳本:
# sedscript - one command per line
s/#00CC00/#9900CC/g
s/#990099/#000000/g
s/#0000FF/#00FF00/g
...
# use sedscript with -f
sed -i -f sedscript *.css
sedscropt自然就是我們剛創建的那個腳本。注意,我們不需要在腳本中引用這句。這樣,我們就可以替換css文件中的所有顏色配置。
##其他例子##
# Trim whitespace from beginning and end of line 刪除開頭的空白
# You *might* have to type a tab instead of t here depending on your version of sed 不通的系統可能使用不同的sed,所以你可能使用tab來代替智力的\t.
sed -r 's/^[ t]*//;s/[ t]*$//g'
# Delete all occurances of foo 刪除文本中所有的foo
sed 's/foo//g'
##結語##
現在你大概能夠理解怎樣用單行的sed命令來修改很多文件了吧?好好使用它們將大大提高你的效率。
這兒有幾個不錯的sed教程(當然也包括本頁啦!):
USEFUL ONE-LINE SCRIPTS FOR SED – Eric Pement
Sed - UNIX Stream Editor - Cheat Sheet – Peteris Krumins
我敢說,我90%的sed的腳本都是用來檢索替換的,所以你已經很快入門了。當然,如我之前所言,sed有太多的變化,所以我會慢慢介紹刪除,增加行號,輸出特定行,以及其他一些技巧。最後,希望你們可以在評論中分享你們最喜歡的sed命令。