1. 簡介
tr命令常用來替換,刪除來自標准輸入字符串中的字符。注意,操作的單位是字符,不是字符串。也就是說,不管是替換還是刪除,都是針對字符串中某個字符的。比如tr命令不能很方便地實現字符串替換:把“Hello World”變成“Hello Beijing”,但是可以很方便地把每一個大寫字符變成小寫字符,echo "Hello World" | tr '[A-Z]' '[a-z]', 最后輸出“hello world”。
2. 使用方法
tr [option] SET1 [SET2]
其中SET1通常作為被處理的字符集,是必須要給出的。而SET2一般只有在使用tr進行字符替換的時候才會用到。而且SET2和SET1必須一樣長。比如, echo "x0y0z" | tr [xyz] [abc] , 這里需要注意,tr是針對字符的,不是字符串的。所以例子中意思是,把字符x替換成字符a,把字符y替換成字符b,把字符z替換成字符c。並不是把xyz替換成abc。這也是SET2必須和SET1一樣長的原因。這個例子最后輸出“a0b0c”。
option
-d 或 --delete, 刪除指定的字符, 比如 echo "i2i3ii0i3i4i9i" | tr -d [0-9], 刪除字符串中所有的數字,最后輸出 “iiiiiiii”。
-c 或 --completment, 反選字符,在SET1中的字符不做處理,其余的做出對應處理。比如 echo "HeHe" | tr -d -c [e] , 刪除除了字符‘e’之外的其他字符。
-s 或-squeeze-repeats, 把連續的字符變成單個字符,比如 echo "I looooooove my moneyyyyyyyyy" | tr -s [a-z], 最后輸出 “I love my money”。
SET
CHAR1-CHAR2, 表示范圍。只能由小到大,不能由大到小
常見的反斜杠轉義字符,比如'\n', '\t', '\r'之類的
[:alnum:] :所有字母字符與數字
[:digit:] :所有數字
[:upper:] :所有大寫字母
[:space:] :所有水平與垂直空格符
3. 常見用法
<1> 小寫轉大寫:
echo “hello” | tr [a-z] [A-Z] 或者 echo "hello" | tr [:lower:] [:upper:]
<2> 刪除Windows文件“造成”的'^M'字符
cat $file_name | tr -d "\r"
<3> 刪除連續的字符
echo "hhhhhh" | tr -s [:alnum:]