歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> Linux系統中tr命令的基本使用教程

Linux系統中tr命令的基本使用教程

日期:2017/3/2 16:25:44   编辑:Linux服務器

  用法:tr [選項]... SET1 [SET2]

  從標准輸入中替換、縮減和/或刪除字符,並將結果寫到標准輸出。

  -c, -C, --complement 首先補足SET1

  -d, --delete 刪除匹配SET1 的內容,並不作替換

  -s, --squeeze-repeats 如果匹配於SET1 的字符在輸入序列中存在連續的

  重復,在替換時會被統一縮為一個字符的長度

  -t, --truncate-set1 先將SET1 的長度截為和SET2 相等

  --help 顯示此幫助信息並退出

  --version 顯示版本信息並退出

  SET 是一組字符串,一般都可按照字面含義理解。解析序列如下:

  \NNN 八進制值為NNN 的字符(1 至3 個數位)

  \\ 反斜槓

  \a 終端鳴響

  \b 退格

  \f 換頁

  \n 換行

  \r 回車

  \t 水平制表符

  \v 垂直制表符

  字符1-字符2 從字符1 到字符2 的升序遞增過程中經歷的所有字符

  [字符*] 在SET2 中適用,指定字符會被連續復制直到吻合設置1 的長度

  [字符*次數] 對字符執行指定次數的復制,若次數以 0 開頭則被視為八進制數

  [:alnum:] 所有的字母和數字

  [:alpha:] 所有的字母

  [:blank:] 所有呈水平排列的空白字符

  [:cntrl:] 所有的控制字符

  [:digit:] 所有的數字

  [:graph:] 所有的可打印字符,不包括空格

  [:lower:] 所有的小寫字母

  [:print:] 所有的可打印字符,包括空格

  [:punct:] 所有的標點字符

  [:space:] 所有呈水平或垂直排列的空白字符

  [:upper:] 所有的大寫字母

  [:xdigit:] 所有的十六進制數

  [=字符=] 所有和指定字符相等的字符

  僅在SET1 和SET2 都給出,同時沒有-d 選項的時候才會進行替換。

  僅在替換時才可能用到-t 選項。如果需要SET2 將被通過在末尾添加原來的末字符的方式

  補充到同SET1 等長。SET2 中多余的字符將被省略。只有[:lower:] 和[:upper:]

  以升序展開字符;在用於替換時的SET2 中以成對表示大小寫轉換。-s 作用於SET1,既不

  替換也不刪除,否則在替換或展開後使用SET2 縮減。

  tr命令中的參數 -c 比較實用,可以用字符串1中字符集的補集替換此字符集,要求字符集為A S C I I。然後在終端上試了一條命令:

  代碼如下:

  tr -cs "[a-z][A-Z]" "[\012*]"

  這是將文件 diary.txt 內的非字符數據轉換成換行符,然後用 -s 選項刪除所有重復出現字符序列,只保留第一個;即將重復出現字符串壓縮為一個字符串。

  後來仔細看這條命令時,發現在 \012 後面加了個 * ,當我去掉這個 * 時,再運行,發現得出的結果全在同一行,並且用 ] (左中括號)隔開,然後我又試著 用 \n 代替 \012,

  發現也是只有在 \n 後加 * 才得出正確的結果。後來將中括號去掉。這是不要 * 時可以輸出正確結果,發而加了 * 後會將結果都輸出在一行,中間用 * 隔開。

  猜想:是否在加中括號後,裡面的特殊字符後都要加 *,無論是用字母表示的,還是用八進制數表示的。

  下面再舉一些例子:

  代碼如下:

  [root@localhost zhangy]# echo "TANK" |tr A-Z a-z #大寫字母轉小寫

  tank

  代碼如下:

  [root@localhost zhangy]# echo 'tank zhang' | tr a-z A-Z #小寫字線轉大寫

  TANK ZHANG

  代碼如下:

  [root@localhost zhangy]# cat aaa.txt #原文件

  aaa

  bbb

  代碼如下:

  [root@localhost zhangy]# cat aaa.txt|tr 'a' 'c' #字母c替換字母a

  ccc

  bbb

  代碼如下:

  [root@localhost zhangy]# cat aaa.txt|tr -d 'a' #刪除所有字母a

  bbb

  代碼如下:

  [root@localhost zhangy]# cat aaa.txt|tr -d '\n\t' 刪除文件file中出現的換行'\n'、制表'\t'字符

  aaabbb

  代碼如下:

  [root@localhost zhangy]# cat aaa.txt|tr -s [a-zA-Z] #刪除重復的字母

  a

  b

  代碼如下:

  [root@localhost zhangy]# cat aaa.txt|tr -s '\n' #刪除空行

  aaa

  bbb

  代碼如下:

  [root@localhost zhangy]# cat aaa.txt |tr -s '\011' '\040' #用空格符\040替換制表符\011

  aaa

  bbb

  代碼如下:

  # tr a c < test #將test文件中的a變成c

Copyright © Linux教程網 All Rights Reserved