原址:
http://www.360doc.com/content/10/0926/09/1107705_56449410.shtml(360doc真夠不要臉的,不註冊不能複製)
http://study.chyangwa.com/IT/AIX/aixcmds5/tr.htm#a0939bb(命令參考大全之tr命令)
tr 命令
用途
語法
tr [ -c | -cds | -cs | -C | -Cds | -Cs | -ds | -s ][ -A ] String1 String2
tr { -cd | -cs | -Cd | -Cs | -d | -s } [ -A ] String1
描述
tr 命令從標準輸入刪除或替換字符,並將結果寫入標準輸出。根據由 String1 和 String2 變量指定的字符串以及指定的標誌,tr 命令可執行三種操作。
轉換字符
如果 String1 和 String2 兩者都已指定,但 -d 標誌沒有指定,則 tr 命令就會從標準輸入中將 String1 中所包含的每一個字符都替換成 String2 中相同位置上的字符。
使用 -d 標誌刪除字符
如果 -d 標誌已經指定,則 tr 命令就會從標準輸入中刪除 String1 中包含的每一個字符。
用 -s 標誌除去序列
如果 -s 標誌已經指定,則 tr 命令就會除去包含在 String1 或 String2 中的任何字符串系列中的除第一個字符以外的所有字符。對於包含在 String1 中的每一個字符,tr 命令會從標準輸出中除去除第一個出現的字符以外的所有字符。對於包含在 String2 中的每一個字符,tr 命令除去標準輸出的字符序列中除第一個出現的字符以外的所有字符。
表達字符串的特殊序列
String1 和 String2 變量中所包含的字符串可以使用以下的約定來表示:
如果某個字符在 String1 中被指定過多次,則該字符就被轉換成 String2 中爲與 String1 中最後出現的字符相對應的字符。
如果由 String1 和 String2 指定的字符串長度不相同,則 tr 命令就會忽略較長一個字符串中的多餘字符。
標誌
退出狀態
該命令返回以下出口值:
0 | 所有輸入處理成功。 |
>0 | 產生錯誤。 |
示例
- 若要將大括號轉換爲小括號,請輸入:
tr '{}' '()' < textfile > newfile
這便將每個 {(左大括號)轉換成 ((左小括號),並將每個 }(右大括號)轉換成 )(右小括號)。所有其它的字符都保持不變。
- 若要將大括號轉換成方括號,請輸入:
tr '{}' '\[]' < textfile > newfile
這便將每個 {(左大括號)轉換成 [(左方括號),並將每個 }(右大括號)轉換成 ](右方括號)。左方括號必須與一個 "\"(反斜扛)轉義字符一起輸入。
- 若要將小寫字符轉換成大寫,請輸入:
tr 'a-z' 'A-Z' < textfile > newfile
- 若要創建一個文件中的單詞列表,請輸入:
tr -cs '[:lower:][:upper:]' '[\n*]' < textfile > newfile
這便將每一序列的字符(除大、小寫字母外)都轉換成單個換行符。*(星號)可以使 tr 命令重複換行符足夠多次以使第二個字符串與第一個字符串一樣長。
- 若要從某個文件中刪除所有空字符,請輸入:
tr -d '\0' < textfile > newfile
- 若要用單獨的換行替換每一序列的一個或多個換行,請輸入:
tr -s '\n' < textfile > newfile
或
tr -s '\012' < textfile > newfile
- 若要以“?”(問號)替換每個非打印字符(有效控制字符除外),請輸入:
tr -c '[:print:][:cntrl:]' '[?*]' < textfile > newfile
這便對不同語言環境中創建的文件進行掃描,以查找當前語言環境下不能打印的字符。
- 要以單個“#”字符替換 <space> 字符類中的每個字符序列,請輸入:
tr -s '[:space:]' '[#*]'
tr是translate的簡寫,亦即翻譯,但是遺憾的是,它不能翻譯句子,只能翻譯單個字符。
1 tr的工作原理是什麼?
先記住一點,tr命令不接受指定的文件參數,而只是對標準輸入進行翻譯。好了,記住這點後,我們繼續。
tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都會被替換爲SET2中相應位置上的字符,簡單吧!
2 舉個例子吧!
tr的例子其實都大同小異,看一個最簡單的例子:
我們有一個包含了四個人身高的數據文件,名字叫height.txt,它的內容是這樣的:
[rocrocket@rocrocket programming]$ cat height.txt
1.79 1.83
1.65 1.59
我們想搞一個惡作劇,將所有人的身高從1米級別都提高到2米級別,呵呵,一個tr就可以搞定。
[rocrocket@rocrocket programming]$ tr 1 2 < height.txt
2.79 2.83
2.65 2.59
希望你沒有忘記,tr只處理標準輸入,所以我們需要將height.txt通過重定向指到tr的標準輸入纔可以。
3 我們可以用tr來修改文件中的間隔符麼?
Good idea!
當使用cut的時候,通常會被間隔符問題所困擾,我們這個時候可以考慮到tr這個命令。
還是以height.txt文件爲例,其中的間隔符是空格,我們把它修改爲製表符吧!
[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt
1.79 1.83
1.65 1.59
這裏有一個小知識點,像製表符、換行符這些字符不好表示,我們可以考慮使用ASCII的八進制形式來表示,製表符的八進制形式是11,回車是15,換行是12。而在tr命令中,可以使用\nnn形式表示八進制形式的字符。如果你實在記不住這些編號,那麼用\t表示製表符你總該可以記住吧!(\n代表新行,\r代表回車)
這下,你應該可以理解上面那條命令的作用了吧。如果你仍然懷疑,那麼,看看下面這條命令,你就該心服口服了:
[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt |sed -n l
1.79\t1.83$
1.65\t1.59$
看!空格的的確確被替換成了製表符嘍!
4 使用tr能把文章中的小寫都轉換成大寫麼?
這個正是tr所擅長的地方。
加入我們擁有一個文件叫做word.txt,裏面包含的內容是AbcdE。
那麼最簡單的替換大小寫的方法是:
[rocrocket@rocrocket programming]$ cat word.txt
AbcdE
[rocrocket@rocrocket programming]$ tr ‘a-z’ ‘A-Z’ < word.txt
ABCDE
5 [CHAR*]怎麼用?
這是 SET2 專用的設定,功能是重複指定的字符到與 SET1 相同長度爲止
例子:
[rocrocket@rocrocket programming]$ cat number.txt
1234567890
[rocrocket@rocrocket programming]$ tr ‘1-5′ ‘[A*]‘ < number.txt
AAAAA67890
6 [CHAR*REPEAT]怎麼用?
這也是SET2專用的設定,功能是將CHAR重複REPEAT次數。其中REPEAT次數可以用八進制數表示,但記得要以0開頭表示八進制數。
例子:
[rocrocket@rocrocket programming]$ tr ‘1-9′ ‘[A*5]BCDE’ < number.txt
AAAAABCDE0
7 在tr中還有哪些表示集合的符號呢?
[:alnum:] :所有字母字符與數字
[:alpha:] :所有字母字符
[:blank:] :所有水平空格
[:cntrl:] :所有控制字符
[:digit:] :所有數字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有小寫字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有標點字符
[:space:] :所有水平與垂直空格符
[:upper:] :所有大寫字母
[:xdigit:] :所有 16 進位制的數字
例子:
將所有的數字都轉換爲字符x。
[rocrocket@rocrocket programming]$ tr [:alnum:] ‘[x*]‘ < number.txt
xxxxxxxxxx
8 tr裏面包含SET1和SET2,那如果出現兩個集合的大小不同的情況,tr如何處理呢?
這個問題,最好的解決辦法就是做實驗啊。
第一種情況是SET1>SET2:
[rocrocket@rocrocket programming]$ tr 1-5 AB < number.txt
ABBBB67890
結論一下子就出來了,SET1中多出來的字符都會和SET2中最後一個字符相對應。
第二種情況SET1<SET2:
[rocrocket@rocrocket programming]$ tr 1-3 ABCDE < number.txt
ABC4567890
很明瞭,SET2中多餘的部分將被拋棄。
9 講一講tr命令的-s選項吧!
這個-s選項,是專門針對SET1起作用的,意思是如果發現有連續的SET1裏的字符,就把它們縮減爲1個。
一個很經典的應用就是把不規律的空格縮減爲一個空格:
[rocrocket@rocrocket programming]$ cat spaces.txt
How are you?
Fine! Thank you!
[rocrocket@rocrocket programming]$ tr -s ‘ ‘ ‘ ‘ < spaces.txt
How are you?
Fine! Thank you!
效果很明顯,用戶很滿意。恩!
10 -d選項咋用?
-d選項是用來刪除字符用的。格式是這樣的:tr -d charset
[rocrocket@rocrocket programming]$ tr -d ‘ ‘ < spaces.txt
Howareyou?
Fine!Thankyou!
看,該有的空格都沒了…這就是-d的作用,把空格都刪除了!
如果你想把文章中的數字都刪除,就tr -d [0-9] < filename就可以了。