Shell_Linux tr 指令详解
tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。 tr只能接收来自标准的输入流,不能接收参数。 语法 tr [OPTION]... SET1 [SET2] 注意:SET2是可选项 SET1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”; SET2:指定要转换成的目标字符集。 不带参数: 将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'删除空行。 字符集代码: 特殊字符 反斜杠 a 终端鸣响b 退格 f 换页 n 换行 r 回车 t 水平制表符 v 垂直制表符 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.将输入字符由大写转换为小写: echo "HELLO WORLD" | tr 'A-Z' 'a-z' hello world'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,集合里可以使用'n'、't',可以可以使用其他ASCII字符。 3.使用tr删除字符: echo "hello 123 world 456" | tr -d '0-9' hello world 4.将制表符转换为空格: cat text | tr 't' ' ' 5.字符集补集,从输入文本中将不在补集中的所有字符删除: echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 n' 1 2 3 4此例中,补集中包含了数字0~9、空格和换行符n,所以没有被删除,其他字符全部被删除了。 6.用tr压缩字符,可以压缩输入中重复的字符: echo "thissss is a text linnnnnnne." | tr -s ' sn' 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'字符: cat file | tr -s "r" "n" > new_file 或 cat file | tr -d "r" > new_file (中级) 1.不带参数将SET2替换SET1替换,且SET1长度大于SET2 [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr 'abc' '12' 11AA122BB222CC3a被替换成1,b被替换成2,c被替换成2 2.不带参数将SET2替换SET1替换,且SET1长度小于SET2 [root@localhost ~]# echo "aaAA1bbBB2ccCC3" | tr 'ab' '123' 11AA122BB2ccCC3a被替换成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-zn' 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上面两种方法都是将重复的多个字符替换成单个字符 6.-c操作 [root@localhost test]# echo "name" |tr -d -c 'a n' a上述操作是删除标准输入中除“a”,空格 "n"之外的字符 其它用法:将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 ' ' '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 ~]#将一句话拆成多行。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- angularjs – Angular JS UI Bootstrap选项卡(ui.bootstrap
- docker-在Hyperledger Fabric中为2个不同的DLT网络重用对等
- vim编辑二进制文件
- angularjs – Angular 1.5 $onInit not firing – typescri
- Scala中的读者monad:返回,本地和序列
- 配置 – OpenLDAP中的新cn = config接口是否已准备好进行生
- 【数据结构】·【带头结点的单链表】
- 翻译:使用 Redux 和 ngrx 创建更佳的 Angular 2
- AngularJS和元标签在SPA模式?
- 整理关于Bootstrap排版的慕课笔记