命令:tr
简介
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的更多相关文章
- 命令——tr
文本处理工具命令——tr 一帮助说明 TR() User Commands TR() NAME tr - translate or delete characters SYNOPSIS tr [OPT ...
- Linux命令-tr
tr命令用于转换文本文件中的字符 [root@localhost test]# cat .txt abcdefg asdfoui asdfqer [root@localhost test]# cat ...
- linux 命令 — tr
tr 对stdin字符进行替换.删除和压缩,基本形式 tr [options] set1 set2 将输入的字符串中的set1字符转换为set2中对应位置的字符 set1.set2表示字符集,如果se ...
- 【Linux】字符转换命令tr
tr (traslate的缩写)可以用来删除一段信息当中的文字,或者是进行文字信息的替换! [root@www ~]# tr [-ds] SET1 ... 选项与参数: -d :删除信息当中的 SET ...
- linux基础命令---tr
tr 删除或者更改文件中的字符串,这个指令一般需要两个字符集. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...
- 转换和删除重复命令tr
前几篇文章介绍了几个用于处理字符的命令和工具,然而在处理大小写转换.删除重复字符等任务时,这些命令处理起来相对较为麻烦.这里将简单介绍Linux下自带的tr命令,相对于其他命令而言,其语法较为简单,比 ...
- Linux Shell 命令--tr
tr 用来从标准输入中通过替换或删除操作进行字符转换 -c或--complerment 取代所有不属于第一字符集的字符. -d ...
- linux 实用命令 —— tr
1. [:alnum:] tr -cd '[:alnum:]' -d:delete:-c:complement:-cd:删除后边的参数以外的: [:class:] [:alpah:]:字母,[:dig ...
- tr命令的使用
tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符. 1 tr的工作原理是什么? 先记住一点,tr命令不接受指定的文件参数,而只是对标准输入进行翻译.好了,记住这 ...
- 【Linux基础】tr命令替换和删除字符
1.tr命令 tr可以对来自标准输入的字符进行替换.压缩和删除,可以将一组字符变成另外一组字符.通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其 ...
随机推荐
- 形参与实参的区别---java基础
1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.因此,形参只在函数内部有效.函数调用结束返回主调用函数后则不能再使用该形参变量.2.实参可以是常量.变量.表达式.函数 ...
- NodeJS API Process全局对象
Process 全局对象,可以在代码中的任何位置访问此对象,使用process对象可以截获进程的异常.退出等事件,也可以获取进程的当前目录.环境变量.内存占用等信息,还可以执行进程退出.工作目录切换等 ...
- CUDA性能优化----warp深度解析
本文转自:http://blog.163.com/wujiaxing009@126/blog/static/71988399201701224540201/ 1.引言 CUDA性能优化----sp, ...
- CentOS配置源
一.源列表 aliyun源 #各系统版本repo文件对应的下载操作 CentOS wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.al ...
- vue实战之狗血事件:页面loading效果诡异之事
接上回 想加一个切换路由时,跳出一个loading动画 ,路由加载后就消失 先做了一个loading提示的浮动层的组件,全局注册,在几个路由页面都引入 在vuex里面维护一个变量比如isLoading ...
- Linux输出重定向>和>>的区别是什么
[简介:>与>>的区别] 1 > 是定向输出到文件,如果文件不存在,就创建文件:如果文件存在,就将其清空:一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`& ...
- 谁在call我-backtrace的实现原理【转】
转自:http://www.xuebuyuan.com/1504689.html 显示函数调用关系(backtrace/callstack)是调试器必备的功能之一,比如在gdb里,用bt命令就可以查看 ...
- OS X 10.11:在exFAT分区的外置硬盘上使用Time Machine。
Time Machine默认需要使用HFS+分区的外置硬盘,但在网络硬盘上也可以使用单个的 .sparsebundle 镜像文件备份.在本地USB或Firewire等接口连接的外置硬盘,只有exFAT ...
- 如何动态修改windows下的host文件
事件背景:为了测试数据提交后,需要在另一个环境的多个测试节点下去验证测试数据是否添加成功,找了一大堆放法,用了比较笨的方法实现了.不多废话思路如下: 为了万无一失,先备份hosts文件内容: 1.读取 ...
- Java 语言多态性
https://www.ibm.com/developerworks/cn/java/java-language-polymorphism/index.html 定义多态性 多态性是面向对象编程中的一 ...