Linux tr命令詳解


一、tr命令介紹

  tr是translate的簡寫,主要用於壓縮重復字符刪除文件中的指定字符以及進行字符替換操作。tr命令只會對修改后的內容進行輸出,並不會修改原文件。tr命令的格式如下:

tr [OPTION] SET1 [SET2]

tr命令常用的選項如下表所示:

選項 功能
-s 壓縮重復字符:用SET1指定的字符來替換對應的重復字符
-d 刪除指定字符:刪除SET1中指定的所有字符
-t 替換字符:將SET1中字符用SET2對應位置的字符進行替換(缺省就是-t選項)
-c 字符補集替換:用SET2替換SET1中沒有包含的字符

二、tr命令詳解

2.1、壓縮重復字符

  可以使用-s選項來壓縮重復字符,用SET1指定的字符來替換對應的重復字符:

➜  test echo "aaabbbaacccfddd" | tr -s '[abcdf]'    
abacfd

在上述命令中,用'[abcdf]'來替換與之對應的重復字符,並將替換后的字符串輸出。使用-s選項也可以刪除空行

➜  test cat test.txt
Monday   09:00
Tuesday  09:10

Wednesday 10:11


Thursday  11:30
Friday   08:00


Saturday  07:40
Sunday   10:00
➜  test cat test.txt|tr -s "\n"   #把重復的換行符壓縮成一個,即達到刪除空行的效果
Monday   09:00
Tuesday  09:10
Wednesday 10:11
Thursday  11:30
Friday   08:00
Saturday  07:40
Sunday   10:00

2.2、刪除指定字符

  可以使用-d選項來刪除SET1中指定的字符:

➜  test echo "a12HJ13fdaADff" | tr -d "[a-z][A-Z]"
1213

➜  test echo "a1213fdasf" | tr -d '[adfs]'
1213

在上述命令中,用正則表達式來匹配要刪除的字符。第一個命令,刪除所有的大小寫字母;第二個命令,刪除匹配'[adfs]'的字符。

2.3、字符替換

  用-t選項可以來替換字符,它會把SET1中字符用SET2對應位置的字符進行替換:

➜  test echo "a1213fdasf" | tr -t '[afd]' '[AFD]'
A1213FDAsF

➜  test echo "Hello World I Love You" |tr -t '[:lower:]' '[:upper:]'    #也可以寫成:echo "Hello World ..." | tr -t '[a-z]' '[A-Z]' 效果一樣
HELLO WORLD I LOVE YOU

在第一個命令中,把所有的a、f、d替換成相應的大寫字母,這里是字符替換,而不是將字符串"afd"替換成字符串"AFD";在第二個命令中,把所有的小寫字母替換成大寫字母。PS:[:upper:] 和[:lower:] 是字符集的形式,其他字符集形式如下表:

字符集 含義
[:alnum:] 所有的字母和數字
[:alpha:] 所有字母
[:blank:] 水平制表符,空白等
[:cntrl:] 所有控制字符
[:digit:] 所有的數字
[:graph:] 所有可打印字符,不包括空格
[:lower:] 所有小寫字母
[:upper:] 所有大寫字母
[:print:] 所有可打印字符,包括空格
[:punct:] 所有的標點字符
[:space:] 所有的橫向或縱向的空白

2.4、字符補集替換

  可以使用-c選項來進行字符補集替換,它會用SET2替換SET1中沒有包含的字符

➜  test cat test.txt
Monday   09:00
Tuesday  09:10
Wednesday 10:11
Thursday  11:30
Friday   08:00
Saturday  07:40
Sunday   10:00
➜ test cat test.txt|tr -c '[a-z][A-Z]' '#' #該命令會把文件中除了字母以外的其他所有字符都替換成"#"(包括換行符) Monday#########Tuesday########Wednesday#######Thursday########Friday#########Saturday########Sunday#########%
➜ test cat test.txt|tr -c '[a-z][A-Z]' '#'|tr -s '#' #然后把重復的#壓縮一下 Monday#Tuesday#Wednesday#Thursday#Friday#Saturday#Sunday#%
➜ test cat test.txt|tr -c '[a-z][A-Z]' '#'|tr -s '#'|tr -t '#' '\n' #然后把#替換成換行符 Monday Tuesday Wednesday Thursday Friday Saturday Sunday

上面的命令可以簡化為:

➜  test cat test.txt|tr -cs "[a-z][A-Z]" "\n"
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

上述命令可以理解為:把所有字母以外的字符替換成換行符,並刪除重復的換行符。

 


免責聲明!

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



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