sed 做字串的置換,tr (translation) 則做字元的置換。 tr 的設計是不能自己讀檔案的,必須從 stdin 輸入資料。 它的基本形態是
tr A B < FILE就是把 FILE 裡面的所有 A 字元全部換成 B 字元。 例如
tr I i < indian.txt會把所有的 I 都換成 i,因此 Indian(s) 都成了 indian(s)。
A 和 B 可以各是一個字串,但是兩個字串的字元數必須相同。 則 A 的第一個字元會換成 B 的第一個字元, 則 A 的第二個字元會換成 B 的第二個字元, 依此類推。也就是 A --> B 的一對一且映成 (one-to-one and onto) 的映射。 例如
tr hgwx 2345 < indian.txt的結果是
one little t4o little t2ree little Indians four little five little si5 little Indians seven little ei32t little nine little Indians ten little Indian boys
如果 A 或 B 字串中包含了空格或跳格,則要用一對 ' 將它包起來。 例如
tr 'one litwhrIdasfu' abcdefghijklmnop < indian.txt則結果就像被編了密碼的文件:
但是這種密碼,在今天是很容易被專家破解的。abcdefggec ghadefggec gijccdefggecdkblfmbn oapjdefggec ofvcdefggec nfxdefggecdkblfmbn ncvcbdefggec cfgigdefggec bfbcdefggecdkblfmbn gcbdefggecdkblfmbdbayn
其實如果要說連續的 ASCII 字碼,可以用 - 號。 例如 a-z 就代表所有從 a 的 ASCII 號碼到 z 的 ASCII 號碼, 其實也就是所有英文小寫字母的意思。 因此
tr a-z A-Z < indian.txt就會把 indian.txt 的文字全部變成大寫英文字母。
那麼,如果要表現 - 自己怎麼辦呢? 只要寫出 - 的八進制 ASCII 號碼 (055)。格式是
tr ' ' '\055' < indian.txt它會把所有的空格都換成 - 號。
習題
注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。
Created: Nov 19, 2000
Last Revised: Nov 19, 2000
© Copyright 2000 Wei-Chang Shann 單維彰