歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

tr 過濾文件命令

您可以將 tr 看作為 sed 的(極其)簡化的變體:它可以用一個字符來替換另一個字符,或者可以完全除去一些字符。您也可以用它來除去重復字符。這就是所有 tr 所能夠做的。

那麼,為什麼要使用 tr,而不使用 sed 呢?當然是為了使事情簡單。例如,如果我們希望用字母“z”來替換出現的所有字母“a”,則可以用 tr a z ,這條命令毫無疑問比 sed -e s/a/z/g 簡單,尤其在把它用到腳本中時,其中的引號轉義很讓人頭痛。另外,在使用 tr 時,可以避免寫那些讓人討厭的正則表達式。

使用 tr 很簡單:使用前面一段中所給出的符號表示法,用一個字符去替換出現的所有另一個字符。當需要替換多個字符時,使用類似於這樣的表示法: tr abc xyz ,它表示用字母“x”去替換出現的所有字母“a”,用字母“y”去替換所有字母“b”,用字母“z”去替換所有字母“c”。這兩組中所列出的字符的數目不必相等。

您也可以指定字符的范圍。例如, tr a-z A-Z 將用對應的大寫字母來替換所有的小寫字母(例如,它將“no smoking”轉換成“NO SMOKING”)。當您在 vi 編輯器中想強調正在編輯的文本的某一部分時,使用這一特殊技巧非常方便。只要按一下 Escape 鍵,然後按 : 鍵,再輸入 2,4!tr 'a-z' 'A-Z' ,最後按一下 Return 鍵。現在,從第 2 行到第 4 行的字母就都轉換成了大寫字母。

另外,當有人給您發送了一個在 Mac OS 或 DOS/Windows 機器上創建的文本文件時,您會發現 tr 非常有用。如果沒有將文件保存為使用 UNIX 換行符來表示行結束這種格式,則需要將這樣的文件轉換成本機 UNIX 格式,否則一些命令實用程序不會正確地處理這些文件。Mac OS 的行尾以回車字符結束,許多文本處理工具將這樣的文件作為一行來處理。為了糾正這個問題,可以用下列技巧:

Mac -> UNIX: tr '\r' '\n' < macfile > unixfile
UNIX -> Mac: tr '\n' '\r' < unixfile > macfile
Microsoft DOS/Windows 約定,文本的每行以回車字符並後跟換行符結束。為了糾正這個問題,可以使用下列命令:

DOS -> UNIX: tr -d '\r' < dosfile > unixfile
UNIX -> DOS:在這種情況下,需要用 awk ,因為 tr 不能插入兩個字符來替換一個字符。要使用的 awk 命令為 awk '{ print $0"\r" }' < unixfile > dosfile
另外,當您需要對文本文件做一些簡單的整理工作(如用 tr -d '\t' 除去制表符,用 tr -s ' ' 除去多余的空格,或者用 tr -d '\n' 將分開的幾行合成一行)時,會需要用 tr。同樣,可以在 vi 內使用所有這些命令;只要記住:在 tr 命令前要加上您希望處理的行范圍和感歎號(!),如 1,$!tr -d '\t' (美元符號表示最後一行)中所示。

Copyright © Linux教程網 All Rights Reserved