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?< font="" style="word-wrap: break-word;">
這樣,會把文件中每一行的,Set1([a-z])字符串中的重復字符壓縮為一個,并把處理的結果打印到標準輸出,原來的文件不變。?
注意這里,set1集合(也就是第一個參數[a-z])中指定的是字符集合,而不是字符串,所以這里做的是把單個字符的重復給壓縮為一個,而不是字符串的重復。?
例如test有一行是tttt.tgz,那么會變成t.tgz,但是hellohellohello會變成helohelohelo.?
*去掉文件中多余的空行:?
$tr -s "[\012]" < test?
或$tr -s ["\n"]<test?< font="" style="word-wrap: break-word;">
這里,假設原來文件test的內容是:?
111?
222?
333?
444?
運行之后,標準輸出:?
111?
222?
333?
444?
而原來文件的內容不會改變。?
*刪除文件中的^M,并代之以換行:?
$tr -s "[\015]" "[\n]"<test?< font="" style="word-wrap: break-word;">
或$tr -s "[\r]" "[\n]<test?< font="" style="word-wrap: break-word;">
一般來說,windows上面編輯的文件拿到linux上面來沒行的結尾可以會有這樣的符號,實際上直接cat也看不出^M符號。?
*替換文件test中所有冒號,代之以逗號:?
$tr -s "[:]" "[,]"<test?< font="" style="word-wrap: break-word;">
或$tr -s ":" ","<test?< font="" style="word-wrap: break-word;">
*顯示$PATH變量將":"變成回車:?
echo $PATH | tr ":" "\n"?
這里,用 echo $PATH 或者 echo $LD_LIBRARY_PATH 等類似的命令來顯示路徑信息的話,我們看到的將會是一大堆用冒號連接在一起的路徑, tr命令可以把這些冒號轉換為回車,這樣,這些路徑就具有很好的可讀性了.?
*以上命令在vi中進行處理:?
1,$!tr -s ":" ","?
這樣,會直接修改vi編輯的文件,可以在vi內使用所有這些命令!只要記住:在tr命令前要加上您希望處理的行范圍和感嘆號 (!),如 1,$!tr -d '\t'(美元符號表示最后一行)。?
*替換第一個參數字符集之外的字符為指定字符:?
tr -c [boy] "k"<trtest?< font="" style="word-wrap: break-word;">
輸入之后,輸出如下:?
kkkkokboykkookk?
這里,會把屬于第一個參數的字符集中的字符之外的所有,都替換成第二個參數對應的字符。第二個參數必須是單個字符,如果是多個字符,則取最后一個,例如"ka"等價于'a'.?
使用"cat trTest"查看文件的內容如下:?
hello?
boy?
good?
*刪除set1字符集指定的字符:?
$tr -d bld<trtest?< font="" style="word-wrap: break-word;">
或$tr -d [bld]<trtest?< font="" style="word-wrap: break-word;">
輸入之后,輸出如下:?
heo?
oy?
goo?
這樣,會刪除trTest文件中的所有"bld"三個字符。這里使用cat查看trTest文件內容如下:?
$cat trTest?
hello?
boy?
good?
*把文件中的小寫字符轉換成大寫的:?
$tr a-z A-Z<testtr?< font="" style="word-wrap: break-word;">
或$tr [a-z] [A-z]<testtr?< font="" style="word-wrap: break-word;">
輸入之后,輸出如下:?
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?
原文:http://blog.chinaunix.net/uid-9525959-id-2001634.html