介紹 tr命令可以對來自標準輸入的字元進行替換、壓縮和刪除。它可以將一組字元變成另一組字元。 語法 tr [OPTION]... SET1 [SET2] 註意:SET2是可選項 OPTION: 字元集代碼: 示例: 1.不帶參數將SET2替換SET1替換,且SET1長度大於SET2 a被替換成1,b ...
介紹
tr命令可以對來自標準輸入的字元進行替換、壓縮和刪除。它可以將一組字元變成另一組字元。
語法
tr [OPTION]... SET1 [SET2]
註意:SET2是可選項
OPTION:
不帶參數:將SET2中的每個字元替換SET1中的每個字元,字元是順序替換,如果SET1的字元長度大於SET2,那麼將SET1中多出來的字元用SET2中的最後一個字元替換。 -t:將SET2中的每個字元替換SET1中的每個字元,字元字元順序1對1替換,無論SET1還是SET2哪個長,只替換對應的字元,多出的不替換。 -c:將SET1中指定的字元之外的字元替換成SET2中指定的字元,如果SET2包含多個字元只用最後一個字元來替換。 -d:刪除SET1中指定的字元,這裡沒有SET2 -s:將SET1中指定的連續的連續重覆的字元用單個字元替代。
字元集代碼:
[: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
上面兩種方法都是將重覆的多個字元替換成單個字元
其它用法:將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 ~]#
將一句話拆成多行。
總結
有一個誤區很容易被誤理解成SET1,SET2是一個字元組合,其實不是這樣的;SET1和SET2裡面都是值的單個字元之間的替換,比如'ab'不要把ab理解成一個組合。
備註: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接。 《歡迎交流討論》 |