tr [OPTION]... SET1 [SET2]
[功能]
轉換或者刪除字符。
[描述]
tr指令從標準輸入設備讀取數據,經過字符串轉譯后,輸出到標準輸出設備。
通過使用 tr,您可以非常容易地實現 sed 的許多最基本功能。您可以將 tr 看作為 sed 的(極其)簡化的變體:它可以用一個字符來替換另一個字符,或者可以完全除去一些字符。您也可以用它來除去重復字符。這就是所有 tr 所能夠做的。
tr用來從標準輸入中通過替換或刪除操作進行字符轉換。tr主要用于刪除文件中控制字符或進行字符轉換。使用tr時要轉換兩個字符串:字符串1用于查詢,字符串2用于處理各種轉換。tr剛執行時,字符串1中的字符被映射到字符串2中的字符,然后轉換操作開始。
參數:
-c或--complerment 取代所有不屬于第一字符集的字符。
-d或--delete 刪除所有屬于第一字符集的字符。
-s或--squeeze-repeats 把連續重復的字符以單獨一個字符表示。
-t或--truncate-set1 這個比較難理解,man上面的解釋是:first truncate SET1 to length of SET2,經過我的實踐發現,將set1的字符依次替換成set2中的字符,如果set1中的字符數目超過set2,那么set1多出的字符忽略。如果沒有-t,那么多出的字符都替換成set2的最后一個字符。
--help 在線幫助。
--version 顯示版本信息。
字符范圍
指定字符串1或字符串2的內容時,只能使用單字符或字符串范圍或列表。
[a-z] a-z內的字符組成的字符串。
[A-Z] A-Z內的字符組成的字符串。
[0-9] 數字串。
/octal 一個三位的八進制數,對應有效的ASCII字符。
[O*n] 表示字符O重復出現指定次數n。因此[O*2]匹配OO的字符串。
tr中特定控制字符的不同表達方式
速記符含義八進制方式
/a Ctrl-G 鈴聲/007
/b Ctrl-H 退格符/010
/f Ctrl-L 走行換頁/014
/n Ctrl-J 新行/012
/r Ctrl-M 回車/015
/t Ctrl-I tab鍵/011
/v Ctrl-X /030
[舉例]
*壓縮文件test內容中重復的字符為一個:
$tr -s [a-z] <test
這樣,會把文件中每一行的,Set1([a-z])字符串中的重復字符壓縮為一個,并把處理的結果打印到標準輸出,原來的文件不變。
注意這里,set1集合(也就是第一個參數[a-z])中指定的是字符集合,而不是字符串,所以這里做的是把單個字符的重復給壓縮為一個,而不是字符串的重復。
例如test有一行是tttt.tgz,那么會變成t.tgz,但是hellohellohello會變成helohelohelo.
*去掉文件中多余的空行:
$tr -s "[/012]" < test
或$tr -s ["/n"] <test
這里,假設原來文件test的內容是:
111
222
333
444
運行之后,標準輸出:
111
222
333
444
而原來文件的內容不會改變。
*刪除文件中的^M,并代之以換行:
$tr -s "[/015]" "[/n]" <test
或$tr -s "[/r]" "[/n] <test
一般來說,windows上面編輯的文件拿到linux上面來沒行的結尾可以會有這樣的符號,實際上直接cat也看不出^M符號。
*替換文件test中所有冒號,代之以逗號:
$tr -s "[:]" "[,]" <test
或$tr -s ":" "," <test
*顯示$PATH變量將":"變成回車:
echo $PATH | tr ":" "/n"
這里,用 echo $PATH 或者 echo $LD_LIBRARY_PATH 等類似的命令來顯示路徑信息的話,我們看到的將會是一大堆用冒號連接在一起的路徑, tr命令可以把這些冒號轉換為回車,這樣,這些路徑就具有很好的可讀性了.
*以上命令在vi中進行處理:
1,$!tr -s ":" ","
這樣,會直接修改vi編輯的文件,可以在vi內使用所有這些命令!只要記?。涸趖r命令前要加上您希望處理的行范圍和感嘆號 (!),如 1,$!tr -d '/t'(美元符號表示最后一行)。
*替換第一個參數字符集之外的字符為指定字符:
tr -c [boy] "k" <trTest
輸入之后,輸出如下:
kkkkokboykkookk
這里,會把屬于第一個參數的字符集中的字符之外的所有,都替換成第二個參數對應的字符。第二個參數必須是單個字符,如果是多個字符,則取最后一個,例如"ka"等價于'a'.
使用"cat trTest"查看文件的內容如下:
hello
boy
good
*刪除set1字符集指定的字符:
$tr -d bld <trTest
或$tr -d [bld] <trTest
輸入之后,輸出如下:
heo
oy
goo
這樣,會刪除trTest文件中的所有"bld"三個字符。這里使用cat查看trTest文件內容如下:
$cat trTest
hello
boy
good
*把文件中的小寫字符轉換成大寫的:
$tr a-z A-Z <testTr
或$tr [a-z] [A-z] <testTr
輸入之后,輸出如下:
111
222
HELLO
這里,testTr內容如下:
111
222
hello
*使用-t替換字符,set1超出set2的部分忽略:
$tr -t hld boy < trTest
輸入之后,輸出如下:
beooo
boy
gooy
這樣,會依次把h,l,d替換成b,o,y如果是hldg那么多出來的字符g忽略,如果沒有-t那么多出來的所有字符被替換成boy的最后一個字符y.
這里trTest文件的內容:
$cat trTest
hello
boy
good
新聞熱點
疑難解答