参考资料:https://www.thegeekstuff.com/2012/12/linux-tr-command/

简介

tr命令用于转换、删除或者去除重复字符。它从STDIN中读取数据并且将其写入SDTOUT。

因此它的用法是这样的。从用户键入的STDIN中读取。

  1. [root@C7 ~]# tr abc ABC
  2. abcdefg
  3. ABCdefg
  4. aabbcc
  5. AABBCC
  6. def
  7. def

或者这样的。通过输入重定向来读取文件的数据。

  1. [root@C7 ~]# cat tr.txt
  2. abcdefg
  3. aabbcc
  4. def
  5. [root@C7 ~]# tr abc ABC < tr.txt
  6. ABCdefg
  7. AABBCC
  8. def

因为是写入到STDOUT,因此不会修改作为STDIN的文件的内容。

它不支持直接将文件作为命令的参数传入。

  1. [root@C7 ~]# tr abc ABC tr.txt
  2. tr: extra operand tr.txt
  3. Try 'tr --help' for more information.

语法格式

  1. tr [OPTION]... SET1 [SET2]

转换

如果SET1和SET2都指定了并且没有-d选项。那么tr就会将SET1中的每个字符按照位置一一替换为SET2中对应的每个字符。

1. 大小写转换

  1. [root@C7 ~]# tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
  2. zhangwenlong
  3. ZHANGWENLONG
  4. [root@C7 ~]# tr [:lower:] [:upper:]
  5. zhangwenlong
  6. ZHANGWENLONG
  7. [root@C7 ~]# tr a-z A-Z
  8. zhangwenlong
  9. ZHANGWENLONG

2. 括号转换

括号这类符号也可以进行转换,不过要注意的是需要使用引号包裹。

  1. [root@C7 ~]# cat tr.txt
  2. {zhang} {wen} {long}
  3. [root@C7 ~]# tr {} () < tr.txt
  4. -bash: syntax error near unexpected token `('
  5. [root@C7 ~]# tr '{}' '()' < tr.txt
  6. (zhang) (wen) (long)
  7. [root@C7 ~]# tr "{}" "()" < tr.txt
  8. (zhang) (wen) (long)

默认情况下,是将转换后的结果写到STDOUT,可以通过输出重定向至文件。

注意:这不会改变原文件。

  1. [root@C7 ~]# cat tr.txt
  2. {zhang} {wen} {long}
  3. [root@C7 ~]# tr '{}' '()' < tr.txt > tr_new.txt
  4. [root@C7 ~]# cat tr.txt
  5. {zhang} {wen} {long}
  6. [root@C7 ~]# cat tr_new.txt
  7. (zhang) (wen) (long)

如果STDIN和STDOUT的文件是同一个的话,也无法达到像我们预期的那样修改文件的效果。

反而会清空文件!!!

  1. [root@C7 ~]# cat tr.txt
  2. {zhang} {wen} {long}
  3. [root@C7 ~]# tr '{}' '()' < tr.txt > tr.txt
  4. [root@C7 ~]# cat tr.txt
  5. [root@C7 ~]# wc -l tr.txt
  6. 0 tr.txt

3. 空格转换制表符

注意,不仅仅是空格被转换,末尾的换行符也被转换了。

  1. [root@C7 ~]# echo "This is for testing" | tr [:space:] '\t'
  2. This is for testing [root@C7 ~]#

通过这个例子比较直观可以显示了。

  1. [root@C7 ~]# echo "This is for testing" | tr [:space:] 'L'
  2. ThisLisLforLtestingL[root@C7 ~]#

4. 使用-s选项来压缩重复的字符

案例3中,如果空格的数量大于一个,那么我们在转换的时候,就会针对每一个连续且重复的空格都进行转换为制表符的操作,如下所示。

  1. [root@C7 ~]# echo "This is for testing" | tr [:space:] '\t'
  2. This is for testing [root@C7 ~]#
  3. [root@C7 ~]# echo "This is for testing" | tr [:space:] '\t'
  4. This is for testing [root@C7 ~]#

通过-s选项,就会将连续且重复的字符,仅识别为单个字符,然后进行转换。

  1. [root@C7 ~]# echo "This is for testing" | tr [:space:] '\t'
  2. This is for testing [root@C7 ~]#
  3. [root@C7 ~]# echo "This is for testing" | tr -s [:space:] '\t'
  4. This is for testing [root@C7 ~]#

同样的,可以将多个连续的空格转换为单个空格字符。

  1. [root@C7 ~]# echo "This is for testing" | tr -s [:space:] ' '
  2. This is for testing

5. 使用-d选项删除特定的字符

因为是删除,所以在语法格式中,只需要SET1,不需要SET2。

  1. [root@C7 ~]# echo "the geek stuff" | tr -d t
  2. he geek suff
  3. [root@C7 ~]# echo "my number is 89757" | tr -d [:digit:]
  4. my number is

如果想要删除文件中符合条件的行的话,那么需要使用sed命令

6. 使用-c选项来获取集合的补集

因为是数字的补集,所以末尾的换行符也被删除了。

  1. [root@C7 ~]# echo "my number is 89757" | tr -cd [:digit:]
  2. 89757[root@C7 ~]#

7. 删除不可打印字符

第五行是三个空格,第六行是三个制表符。从结果来看,不可打印的字符应该是换行符和制表符。

  1. [root@C7 ~]# cat tr.txt
  2. zhangwenlong
  3. ZHANGWENLONG
  4. 123456
  5. !@#$%^
  6. [root@C7 ~]# tr -dc [:print:] < tr.txt
  7. zhangwenlongZHANGWENLONG123456!@#$%^ [root@C7 ~]#

8.将文件中的所有行合并为一行

  1. [root@C7 ~]# cat tr.txt
  2. zhangwenlong
  3. ZHANGWENLONG
  4. 123456
  5. !@#$%^
  6. [root@C7 ~]# tr -s '\n' ' ' < tr.txt
  7. zhangwenlong ZHANGWENLONG 123456 !@#$%^ [root@C7 ~]#

命令:tr的更多相关文章

  1. 命令——tr

    文本处理工具命令——tr 一帮助说明 TR() User Commands TR() NAME tr - translate or delete characters SYNOPSIS tr [OPT ...

  2. Linux命令-tr

    tr命令用于转换文本文件中的字符 [root@localhost test]# cat .txt abcdefg asdfoui asdfqer [root@localhost test]# cat ...

  3. linux 命令 — tr

    tr 对stdin字符进行替换.删除和压缩,基本形式 tr [options] set1 set2 将输入的字符串中的set1字符转换为set2中对应位置的字符 set1.set2表示字符集,如果se ...

  4. 【Linux】字符转换命令tr

    tr (traslate的缩写)可以用来删除一段信息当中的文字,或者是进行文字信息的替换! [root@www ~]# tr [-ds] SET1 ... 选项与参数: -d :删除信息当中的 SET ...

  5. linux基础命令---tr

    tr 删除或者更改文件中的字符串,这个指令一般需要两个字符集. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       ...

  6. 转换和删除重复命令tr

    前几篇文章介绍了几个用于处理字符的命令和工具,然而在处理大小写转换.删除重复字符等任务时,这些命令处理起来相对较为麻烦.这里将简单介绍Linux下自带的tr命令,相对于其他命令而言,其语法较为简单,比 ...

  7. Linux Shell 命令--tr

    tr        用来从标准输入中通过替换或删除操作进行字符转换                -c或--complerment 取代所有不属于第一字符集的字符.                -d ...

  8. linux 实用命令 —— tr

    1. [:alnum:] tr -cd '[:alnum:]' -d:delete:-c:complement:-cd:删除后边的参数以外的: [:class:] [:alpah:]:字母,[:dig ...

  9. tr命令的使用

    tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符. 1 tr的工作原理是什么? 先记住一点,tr命令不接受指定的文件参数,而只是对标准输入进行翻译.好了,记住这 ...

  10. 【Linux基础】tr命令替换和删除字符

    1.tr命令 tr可以对来自标准输入的字符进行替换.压缩和删除,可以将一组字符变成另外一组字符.通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其 ...

随机推荐

  1. SQL提高查询效率【in、not in、between、like】等条件讲述

    在使用SQL语句查询数据库记录时,如果要查询相同的内容,有着不同的多种方法. 仍然,尽管使用多种方法可以得到相同的结果,但是,如果您使用不同的方法,在执行效益上是截然不同的.因此,我们得仔细考虑,如果 ...

  2. linux命令总结之echo命令

    echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串. echo命令的语法是: echo [选 ...

  3. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  4. python常用模块-配置文档模块(configparser)

    python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...

  5. 关于Html class id 命名规范

    CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:l ...

  6. Dubbo学习笔记7:Dubbo的集群容错与负载均衡策略

    Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种 ...

  7. bzoj千题计划212:bzoj1864: [Zjoi2006]三色二叉树

    http://www.lydsy.com/JudgeOnline/problem.php?id=1864 #include<cstdio> #include<cstring> ...

  8. centos7配置上网

    过程请看图: just so so!

  9. html canvas非正方旋转和缩放...写的大多是正方的有人表示一直看正方的看厌了

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. HDU 4508 湫湫系列故事——减肥记I (完全背包)

    题意:有n种食物,每种食物可以给湫湫带来一个幸福感a,同时也会给她带来b的卡路里的摄入,然后规定她一天摄入的卡路里的量不能超过m,一共有n种食物,问可以得到的 最大的幸福感是多少? 解题报告:一开始以 ...