Linux tr命令


介紹

tr命令可以對來自標准輸入的字符進行替換、壓縮和刪除。tr只能接收來自標准的輸入流,不能接收參數。


語法

tr [OPTION]... SET1 [SET2]

注意:SET2是可選項

OPTION:

不帶參數:將SET2中的每個字符替換SET1中的每個字符,字符是順序替換,如果SET1的字符長度大於SET2,那么將SET1中多出來的字符用SET2中的最后一個字符替換。
-t:將SET2中的每個字符替換SET1中的每個字符,字符字符順序1對1替換,無論SET1還是SET2哪個長,只替換對應的字符,多出的不替換。
-c:取反操作,取數據流中SET1中指定字符的補集。
-d:刪除SET1中指定的字符,這里沒有SET2
-s:將SET1中指定的連續的連續重復的字符用單個字符替代,可以使用-s '\n'刪除空行

 

字符集代碼:

[:alnum:]:字母和數字,可以用來替代'a-zA-Z0-9' 
[:alpha:]:字母,可以用來替代'a-zA-Z' 
[:cntrl:]:控制(非打印)字符 
[:digit:]:數字,可以用來替代'0-9' 
[:graph:]:圖形字符 
[:lower:]:小寫字母,可以用來替代'a-z' 
[:print:]:可打印字符 
[:punct:]:標點符號 
[:space:]:空白字符 
[:upper:]:大寫字母,可以用來替代'A-Z' 
[:xdigit:]:十六進制字符

 

  \\        反斜杠
  \a        終端鳴響
  \b        退格
  \f        換頁
  \n        換行
  \r        回車
  \t        水平制表符
  \v        垂直制表符
\0 null字符

 

 

 

示例:

 1.不帶參數將SET2替換SET1替換,且SET1長度大於SET2

[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr 'abc' '12'
11AA122BB222CC3

a被替換成1,b被替換成2,c被替換成2

 2.不帶參數將SET2替換SET1替換,且SET1長度小於SET2

[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr 'ab' '123'
11AA122BB2ccCC3

a被替換成1,b被替換成2

 3.-t參數

[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -t 'abc' '12'
11AA122BB2ccCC3
[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -t 'ab' '123'
11AA122BB2ccCC3

都是a被替換成1,b被替換成2

4.刪除指定字符,-d

[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -d 'a-z' 
AA1BB2CC3
[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -d -c 'a-z\n'  
aabbcc

第一個是刪除小寫字符,第二個是刪除小寫字符之外的其它字符, 下面這種使用字符集的效果是一樣的。

[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -d '[:lower:]' 
AA1BB2CC3
[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -d -c '[:lower:]\n'
aabbcc

5.替換連續字符,-s

[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -s 'a-zA-Z'
aA1bB2cC3
[root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -s '[:alnum:]\n'
aA1bB2cC3

上面兩種方法都是將重復的多個字符替換成單個字符

6.-c操作 

[root@localhost test]# echo "name" |tr -d -c 'a \n'
a

上述操作是刪除標准輸入中除“a”,空格 "\n"之外的字符

 

其它用法:將null字符用換行符替代

[root@localhost ~]# cat /proc/4518/environ \n
TERM=xtermPATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/mysql/binPWD=/usr/local/mysqlSHLVL=2OLDPWD=/_=/usr/local/mysql/bin/mysqld_safecat: n: No such file or directory
[root
@localhost ~]# cat /proc/4518/environ |tr '\0' '\n' TERM=xterm PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/mysql/bin PWD=/usr/local/mysql SHLVL=2 OLDPWD=/ _=/usr/local/mysql/bin/mysqld_safe [root@localhost ~]#

將一句話拆成多行。

 

其它的巧妙用法:

1.文本內容相加

[root@localhost test]# cat test
0 1 2 3 4
5 6 7 8 9

test文件是由兩行空格的數字組成,接下來需要將里面的數字想加

[root@localhost test]# cat test|tr ' ' '\n'|echo $[ $( tr '\n' '+' ) 0 ]
45

2.加密

[root@localhost test]# echo "name" |tr 'name' 'xcbe'
xcbe

總結

有一個誤區很容易被誤理解成SET1,SET2是一個字符組合,其實不是這樣的;SET1和SET2里面都是值的單個字符之間的替換,比如'ab'不要把ab理解成一個組合,tr還有很多的巧妙的用法這需要多去實踐。

 

 

備注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接。

《歡迎交流討論》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM