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

简介

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

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

[root@C7 ~]# tr abc ABC
abcdefg
ABCdefg
aabbcc
AABBCC
def
def

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

[root@C7 ~]# cat tr.txt
abcdefg
aabbcc
def
[root@C7 ~]# tr abc ABC < tr.txt
ABCdefg
AABBCC
def

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

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

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

语法格式

tr [OPTION]... SET1 [SET2]

转换

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

1. 大小写转换

[root@C7 ~]# tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
zhangwenlong
ZHANGWENLONG
[root@C7 ~]# tr [:lower:] [:upper:]
zhangwenlong
ZHANGWENLONG
[root@C7 ~]# tr a-z A-Z
zhangwenlong
ZHANGWENLONG

2. 括号转换

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

[root@C7 ~]# cat tr.txt
{zhang} {wen} {long}
[root@C7 ~]# tr {} () < tr.txt
-bash: syntax error near unexpected token `('
[root@C7 ~]# tr '{}' '()' < tr.txt
(zhang) (wen) (long)
[root@C7 ~]# tr "{}" "()" < tr.txt
(zhang) (wen) (long)

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

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

[root@C7 ~]# cat tr.txt
{zhang} {wen} {long}
[root@C7 ~]# tr '{}' '()' < tr.txt > tr_new.txt
[root@C7 ~]# cat tr.txt
{zhang} {wen} {long}
[root@C7 ~]# cat tr_new.txt
(zhang) (wen) (long)

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

反而会清空文件!!!

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

3. 空格转换制表符

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

7. 删除不可打印字符

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

[root@C7 ~]# cat tr.txt
zhangwenlong
ZHANGWENLONG
123456
!@#$%^ [root@C7 ~]# tr -dc [:print:] < tr.txt
zhangwenlongZHANGWENLONG123456!@#$%^ [root@C7 ~]#

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

[root@C7 ~]# cat tr.txt
zhangwenlong
ZHANGWENLONG
123456
!@#$%^ [root@C7 ~]# tr -s '\n' ' ' < tr.txt
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. C/C++ 类成员函数指针 类成员数据指针

    普通函数指针:  "return_type (*ptr_name)(para_types) " 类成员函数指针: "return_type (class_name::*p ...

  2. 假装会python--爬取贴吧正文

    贴吧的老历史想存下来,强行python爬取一波 队友太强,躺好别动,偶尔做点副业 假装会python 基本流程: 1.爬取页面,获取页面的html源码 2.分析源码 通过正则表达式 匹配到想要的内容 ...

  3. java基础-网络编程(Socket)技术选型入门之NIO技术

    java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...

  4. null和System.DBNull.Value的区别

    我记得之前在写一个程序的时候用到了这个知识点,当时判断的时候,有时候null可以,有时候必须是System.DBNull.Value 由于不清楚这两个的区别所以纠结了很久.查了一下,二者的区别如下: ...

  5. springSecurity自定义认证配置

    上一篇讲了springSecurity的简单入门的小demo,认证用户是在xml中写死的.今天来说一下自定义认证,读取数据库来实现认证.当然,也是非常简单的,因为仅仅是读取数据库,权限是写死的,因为相 ...

  6. POJ 3252 Round Number(数位DP)

    Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6983   Accepted: 2384 Des ...

  7. hdu 3022 Sum of Digits

    http://acm.hdu.edu.cn/showproblem.php?pid=3022 题意: 最多不超过10000组数据,每组数据给定两个数n,m,求一个最小的数,使得该数每一位之和等于n,每 ...

  8. 一个ssm综合小案例-商品订单管理-第二天

    准确来说是第二三天,一时兴起,把这个小项目一鼓作气写完了(较大的bug 均已被我手动捉出并 fix )才来写一篇博客. 接上文 第一天配置继续讲解:

  9. Java Web之路(二)Servlet之HttpServletResponse和HttpServletRequest

    HttpServletResponse 1.告诉服务器应用使用UTF-8解析文本的两种方式,告诉客户端要使用什么编码 response.setHeader("content-type&quo ...

  10. git 学习小记之图形化界面客户端

    习惯了 Windows 的用户,一直不喜欢用类似命令行的东西来操作,当然我也不是不喜欢,只是操作太慢了.也许 Linux 大神在命令行的帮助下,办事效率翻倍,那也是非常常见的事情..当然我不是大神,所 ...