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, 表示范围。只能由小到大,不能由大到小
常见的反斜杠转义字符,比如' ', ' ', ' '之类的
[: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 " "
<3> 删除连续的字符
echo "hhhhhh" | tr -s [:alnum:]