經過使用tr,您能夠很是容易地實現 sed 的許多最基本功能。您能夠將 tr 看做爲 sed的(極其)簡化的變體:它能夠用一個字符來替換另外一個字符,或者能夠徹底除去一些字符。您也能夠用它來除去重複字符。這就是全部 tr所可以作的。 git
tr用來從標準輸入中經過替換或刪除操做進行字符轉換。tr主要用於刪除文件中控制字符或進行字符轉換。使用tr時要轉換兩個字符串:字符串1用於查詢,字符串2用於處理各類轉換。tr剛執行時,字符串1中的字符被映射到字符串2中的字符,而後轉換操做開始。
帶有最經常使用選項的tr命令格式爲:
tr -c -d -s ["string1_to_translate_from"]["string2_to_translate_to"] < input-file
這裏:
-c 用字符串1中字符集的補集替換此字符集,要求字符集爲ASCII。
-d 刪除字符串1中全部輸入字符。
-s 刪除全部重複出現字符序列,只保留第一個;即將重複出現字符串壓縮爲一個字符串。
input-file是轉換文件名。雖然可使用其餘格式輸入,但這種格式最經常使用。數組
二、字符範圍
指定字符串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 \030app
實例:工具
、將文件file中出現的"abc"替換爲"xyz"oop
# echo $PATH | tr -s ":" "\n"編碼
----------------------------------------------------------------------------------------------------------------------------------------------------------------spa
轉換字符。unix
tr [ -c | -cds | -cs | -C | -Cds | -Cs | -ds | -s ] [ -A ] String1 String2code
tr { -cd | -cs | -Cd | -Cs | -d | -s } [ -A ] String1htm
tr 命令從標準輸入刪除或替換字符,並將結果寫入標準輸出。根據由 String1 和 String2 變量指定的字符串以及指定的標誌,tr 命令可執行三種操做。
若是 String1 和 String2 二者都已指定,但 -d 標誌沒有指定,那麼 tr 命令就會從標準輸入中將 String1 中所包含的每個字符都替換成 String2 中相同位置上的字符。
若是 -d 標誌已經指定,那麼 tr 命令就會從標準輸入中刪除 String1 中包含的每個字符。
若是 -s 標誌已經指定,那麼 tr 命令就會除去包含在 String1 或 String2 中的任何字符串系列中的除第一個字符之外的全部字符。對於包含在 String1 中的每個字符,tr 命令會從標準輸出中除去除第一個出現的字符之外的全部字符。對於包含在 String2 中的每個字符,tr 命令除去標準輸出的字符序列中除第一個出現的字符之外的全部字符。
String1 和 String2 變量中所包含的字符串可使用如下的約定來表示:
C1-C2 | 指定了 C1 所指定的字符和 C2 所指定的字符之間(包括 C1 和 C2)進行整理的字符串。C1 所指定的字符必須整理放在由 C2 所指定的字符以前。
注:
在使用本方法指定子範圍時,當前語言環境對結果有重要影響。若是須要用命令來產生與語言環境無關的一致結果,那麼應該避免使用子範圍。
|
[C*Number] | Number 是一個整數,它指定了由 C 所指定的字符的重複次數。除非其首位數字是 0,不然 Number 一概視爲是十進制整數;若是首位數字是 0,那麼視爲八進制整數。 |
[C*] | 用 C 指定的字符填寫字符串。該選項只用於包含在 String2 中的字符串末尾,它強制 String2 中的字符串具備與由 String1 變量所指定的字符串同樣的字符數。*(星號)後面指定的任何字符都被忽略。 |
[ :ClassName: ] | 指定由當前語言環境中的 ClassName 所命名的字符類中的全部字符。類名能夠是下述名稱中的任何一種: alnum lower alpha print blank punct cntrl space digit upper graph xdigit 除 [:lower:] 和 [:upper:] 轉換字符類以外,其餘字符類指定的字符都按未指定的順序放入數組中。因爲未定義字符類指定的字符的順序,僅當目的爲將多個字符映射爲一個時才使用這些字符。轉換字符類除外。 有關字符類的詳細狀況,請參閱 ctype 子例程。 |
[ =C= ] | 指定全部的字符具備與 C 所指定的字符相同的等價類。 |
\Octal | 指定字符,其編碼由 Octal 所指定的八進制值表示。Octal 能夠是 1 位、2 位 或 3 位八進制整數。空字符能夠用 '\0' 表示,並能夠像任何其餘的字符那樣進行處理。 |
\ControlCharacter | 指定與 ControlCharacter 所指定的值相應的控制字符。能夠表示如下值:
|
\\ | 規定 "\"(反斜槓)就是做反斜槓使用,而無做爲轉義字符的任何特殊意義。 |
\[ | 指定「[」(左括號)就做爲左括號使用,而無做爲特定字符串序列的開始字符的任何特殊意義。 |
\- | 指定「-」(負號)就做爲負號使用,而無做爲範圍分隔符的任何特殊意義。 |
若是某個字符在 String1 中被指定過屢次,那麼該字符就被轉換成 String2 中爲與 String1 中最後出現的字符相對應的字符。
若是由 String1 和 String2 指定的字符串長度不相同,那麼 tr 命令就會忽略較長一個字符串中的多餘字符。
-A | 使用範圍和字符類 ASCII 整理順序、一個字節一個字節地執行全部操做,而不是使用當前語言環境整理順序。 |
-C | 指定 String1 值用 String1 所指定的字符串的補碼替換。String1 的補碼是當前語言環境的字符集中的全部字符,除了由 String1 指定的字符之外。若是指定了 -A 和 -c 標誌都已指定,那麼與全部 8 位字符代碼集合有關的字符將被補足。若是指定了 -c 和 -s 標誌,那麼 -s 標誌適用於String1 的補碼中的字符。 若是沒有指定 -d 選項,那麼由 String1 指定的字符的補碼將放置到升序排列的數組中(如 LC_COLLATE 的當前設置所定義)。 |
-c | 指定 String1 值用 String1 所指定的字符串的補碼替換。String1 的補碼是當前語言環境的字符集中的全部字符,除了由 String1 指定的字符之外。若是指定了 -A 和 -c 標誌都已指定,那麼與全部 8 位字符代碼集合有關的字符將被補足。若是指定了 -c 和 -s 標誌,那麼 -s 標誌適用於String1 的補碼中的字符。 若是沒有指定 -d 選項,那麼由 String1 指定的值的補碼將放置到經過二進制值升序排列的數組中。 |
-d | 從標準輸入刪除包含在由 String1 指定的字符串中的每一個字符。
注:
|
-s | 在重複字符序列中除去除第一個字符之外的全部字符。將 String1 所指定的字符序列在轉換以前從標準輸入中除去,並將 String2 所指定的字符序列從標準輸出中除去。 |
String1 | 指定一個字符串。 |
String2 | 指定一個字符串。 |
該命令返回如下退出值:
全部輸入處理成功。 | |
>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
這便對不一樣語言環境中建立的文件進行掃描,以查找當前語言環境下不能顯示的字符。
tr -s '[:space:]' '[#*]'