15 11月 2007

Linux中 字串的取代指令

一般人以為對字串的處理(刪除、取代)是用tr,但是實際上tr只能針對「字元」處理,如果要對「字串」做處理的話,則必須請出sed這個指令了。

以下簡單的比較了tr與sed的用法差別

tr [option] SET1 SET2
  • option -d 刪除, Ex: tr -d 't'
  • option -s 取代, Ex: tr -s 't' 'a'
可將[STDIN]的內容,做字元的取代或刪除
ex:
現有一File:source.txt內容為:
test
tttt
eeee
ssss
tttt
% cat source.txt | tr 'test' 'ABCD'
DBCD
DDDD
BBBB
CCCC
DDDD
注意到這個結果,tr只是單純的將test <=> ABCD做個對應,並將文件內容轉換為
  • t->D
  • e->B
  • s->C


sed [regurage] [file]
可充份地表示「正規表示式」,用法很像perl裡的寫法,input的方式,可由[STDIN]或是File
Ex: 想將'test'取代為'abcd'
% cat source.txt | sed s/test/abcd/g
% sed s/test/abcd/g source.txt
abcd
tttt
eeee
ssss
tttt
說明:
s/// 是取代的意思
s/[from]/[to]/
最後加個g,表示global,就是全部取代的意思,如果不加,則只會取代找到的第一個
[form] & [to]裡頭就可以寫正規表示式

這邊只是粗淺地介紹一下字串取代的功能部分,如果想深入了解,就再去找資料吧XD

沒有留言: