Shell_Linux tr 指令详解


tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

tr只能接收来自标准的输入流,不能接收参数。



语法

tr [OPTION]... SET1 [SET2]

注意:SET2是可选项

SET1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”;


SET2:指定要转换成的目标字符集。


OPTION:

不带参数:

    将SET2中的每个字符替换SET1中的每个字符,字符是顺序替换,如果SET1的字符长度大于SET2,那么将SET1中多出来的字符用SET2中的最后一个字符替换。

-t, --truncate-set1:

    将SET2中的每个字符替换SET1中的每个字符,字符字符顺序1对1替换,无论SET1还是SET2哪个长,只替换对应的字符,多出的不替换。

-c,  --complerment:

   取反操作,取数据流中SET1中指定字符的补集。

-d ,--delete :

   删除SET1中指定的字符,这里没有SET2

-s ,--squeeze-repeats :

   将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字符


使用方式:

  tr '[:lower:]' '[:upper:]'


实例 

(入门级)

1.将文件file中出现的"abc"替换为"xyz"

cat file | tr "abc" "xyz" > new_file
  
  
【注意】这里,凡是在file中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。


2.将输入字符由大写转换为小写:


  
  
  1. echo "HELLO WORLD" | tr 'A-Z' 'a-z'
  2. hello world
'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。


3.使用tr删除字符:


  
  
  1. echo "hello 123 world 456" | tr -d '0-9'
  2. hello world


4.将制表符转换为空格:

cat text | tr '\t' ' '
  
  


5.字符集补集,从输入文本中将不在补集中的所有字符删除:


  
  
  1. echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'
  2. 1 2 3 4
此例中,补集中包含了数字0~9、空格和换行符\n,所以没有被删除,其他字符全部被删除了。


6.用tr压缩字符,可以压缩输入中重复的字符:


  
  
  1. echo "thissss is a text linnnnnnne." | tr -s ' sn'
  2. this is a text line.

7.巧妙使用tr做数字相加操作:

echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]
  
  

8.删除Windows文件“造成”的'^M'字符:


  
  
  1. cat file | tr -s "\r" "\n" > new_file
  2. cat file | tr -d "\r" > new_file



(中级)


示例:


 1.不带参数将SET2替换SET1替换,且SET1长度大于SET2


  
  
  1. [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr 'abc' '12'
  2. 11AA122BB222CC3
a被替换成1,b被替换成2,c被替换成2


 2.不带参数将SET2替换SET1替换,且SET1长度小于SET2


  
  
  1. [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr 'ab' '123'
  2. 11AA122BB2ccCC3
a被替换成1,b被替换成2



 3. -t参数


  
  
  1. [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -t 'abc' '12'
  2. 11AA122BB2ccCC3
  3. [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -t 'ab' '123'
  4. 11AA122BB2ccCC3
都是a被替换成1,b被替换成2


4.删除指定字符,-d


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

第一个是删除小写字符,第二个是删除小写字符之外的其它字符, 下面这种使用字符集的效果是一样的。


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


5.替换连续字符,-s


  
  
  1. [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -s 'a-zA-Z'
  2. aA1bB2cC3
  3. [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr -s '[:alnum:]\n'
  4. aA1bB2cC3
上面两种方法都是将重复的多个字符替换成单个字符


6.-c操作 


  
  
  1. [root@localhost test]# echo "name" |tr -d -c 'a \n'
  2. a
上述操作是删除标准输入中除“a”,空格 "\n"之外的字符



其它用法:将null字符用换行符替代

  
  
  1. [root@localhost ~]# cat /proc/4518/environ \n
  2. 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
  3. [root@localhost ~]# cat /proc/4518/environ |tr '\0' '\n'
  4. TERM=xterm
  5. PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/mysql/bin
  6. PWD=/usr/local/mysql
  7. SHLVL=2
  8. OLDPWD=/
  9. _=/usr/local/mysql/bin/mysqld_safe
  10. [root@localhost ~]#
将一句话拆成多行。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值