UNIX 指令 - tr

【功能】

字元轉換的處理

【語法】

tr [-cds] [string1 [string2]]

【說明】

tr 指令會從標準輸入讀取字元,經過轉換或刪除後送到標準輸出,使用時多會配合重新導向的處理功能。取代的處理會將字串string1 中找尋到的字元對應到字串 string2 中相對位置的字元。如 tr abcd 1234 會將 a 以 1 取代、以 b 以 2 取代等。若 string1 的長度大於 string2,則 string1 多出的字元將不會進行轉換,例如tr jack fly 是將 j 以 f 取代、a 以 l取代、c 以 y 取代,而字元 k 則不會去處理。若 string1 中要被取代的字元曾出現 1 次以上時,則是以最後出現的位置做取代,例如 tr apple fruit 會將 p 字元以 u 字元取代而不是以 r 字元。

在 string1、string2 中可使用下面的格式來指定字元的範圍。

[a-z] 代表 ASCII 中的字元 a 到 z 的字串。

[a*n] 代表重複 n 個 a。

n 若是 0 為起始,則表示 n 是 8 進位數字,否則系統預設 n 是 10進位數字。

n 的值是 0 或省略時代表最大數,用來與 string1 相對應。

字元 '\' 後可接對 shell 有特別意義的字元,若字元 '\' 後接的是 1、2 或 3 個 8 進位數字時,是代表 ASCII 碼。字元 NULL(ASCII 碼為 0)在輸入時就會被自動刪除。

【選項】

選 項 說 明
-c(complements) 將不在 string1 中出現的字元視為要被取代的字元。
-d(delete) 刪除在 string1 中出現的字元。
-s(squeeze) 若在輸出的結果中有出現連續的字元,又曾出現在字串 string2 時,則只輸出一個字元。

【範例】

1. 將小寫字元轉換成大寫字元:

$ cat data
A gallon of ordinary sea water contains about a quarter of a pound of salt.
$ tr "[a-z]" "[A-Z]" <data
A GALLON OF ORDINARY SEA WATER CONTAINS ABOUT A QUARTER OF A POUND OF SALT.

檔案 data 內容原來是大小寫字元都存在,tr指令執行後將小寫字元轉換,使 a 字元對應到 A 字元、b 字元對應到 B字元等,最後檔案 data 的內容是以大寫方式輸出。

2. 消除非英文字母的字元:

tr -c "[a-z] [A-Z]" "[ *]" <letter >letter.new

從 letter 檔案讀取資料,經過轉換後送到 letter.new 檔案。轉換的處理是將非大小寫的英文字母以空白字元取代,輸出的結果只保留大寫及小寫的英文字母。由於使用 -c 選項,因此 string1 所對應的範圍是英文字母之外的字元,而在 string2 中的字串則以空白字元之後加上 '*' 字元,以代表最大數目的空白字元。

3. 消除輸入資料中的數字:

tr -s "0123456789" "[ *]" <preview

tr 指令會從檔案 preview 讀取資料,若有讀取到數字的資料,則轉換成一個空白字元輸出到終端機上。-s 選項可使得輸入的數字 548700 轉換成 1 個空白字元,而非對應長度的空白字元。

網路電視    旅遊景點    算命    象棋殘局    回首頁