2011年8月20日

sed簡易筆記

sed為串流編輯器,可直接編輯檔案的資料流(stream),其工作模式為比對每一資料列,若符合樣式,即執行指定的動作。

要注意sed並不會修改檔案的內容,而是讀取檔案後,修改其內容再送到標準輸出。

#sed 'pattern cmd' files
sed syntax

  • #sed '1,4d' thisfile
    刪除thisfile的第1~4列,剩下的顯示出來
  • #sed '/http/d' thisfile
    刪除thilsfile中含有http字串的所有列,剩下的顯示出來
  • #sed '/[0-9]\{3\}/d' thisfile
    刪除thisfile中含有3個數字的所有列,剩下的顯示出來
  • #sed '/^$/' thisfile
    刪除thisfile中的所有空白列,剩下的顯示出來 
  • #sed '/http/!d' thisfile
    刪除thilsfile不含有http字串的所有列,剩下的顯示出來
  • #sed -n '/http/p' thisfile
    印出thisfile中含有http字串的所有列(-n是抑制預設全部印出的選項)
  • #sed -n 's/http/web/gp' thisfile
    將thislfile中所有的http字串改為web, s為取代(substitute)的命令, g表示全域(global),不加g時,只會更換第一個找到的http字串
  • #sed -n 's/http//gp' thisfile
    將thisfile中所有的http字串刪除 
  • #sed 's/^...//' thisfile
    將thisfile中每一行的前三個字元刪除 
  • #sed -n 's/\(http\)/\1s/gp' thisfile
    使用\1將符合http字串的部份存起來,再抓出來使用,所以上面是將每一列中的http字串換成https字串
  • #sed -n '/AAA/ s/123/456/p' thisfile
    找到在thisfile中有AAA的資料列後,再將該列的123換成456
  •  #sed -n '/AAA/,/DDD/ s/123/456/p' thisfile
    找到在thsifle中AAA列至DDD列的所有資料列中,將123換成456
  •  #sed -n '2,4 s/123/456/p' thisfile
    將thisfile中第2~4列的123換成456