UNIX 文字工具: 字元置換

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 單維彰

shann@math.ncu.edu.tw