通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。

命令格式

tr [option] ["string1"] ["string2"] < file  
常用的选项有:
默认选项。就是没有任何选项的时候,tr默认为替换操作,就是将string1在文件中出现的字符替换为string2中的字符,这里要注意的是替换关系。
-c选项,用string1中字符的补集替换string1,这里的字符集为ASCII。
-d选项,删除文件中所有在string1中出现的字符。
-s选项,删除文件中重复并且在string1中出现的字符,只保留一个。
-c选项在使用时,只是将string1替换为现在的补集,如在使用

[root@localhost ~]# echo "hello world,root,2012" | tr -c "0-9" "*"
*****************2012*[root@localhost ~]# echo "hello world,root,2012" | tr "0-9" "*"
hello world,root,****
[root@localhost ~]# 

可以看出,我们使用0-9,添加-c选项后,会把0-9替换为其补集,这时补集自然不包含0-9,而包含很多其它的字符,接下来就把所有的其它字符都替换成*号,但不包含数字。

字符串的取值范围
指定string或string2的内容时,只能使用单字符或字符串范围或列表。
[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
\octal 一个三位的八进制数,对应有效的ASCII字符。
[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。

控制字符的不同表达方式

速记符 含义 八进制方式
\a Ctrl-G  铃声\007
\b Ctrl-H 退格符\010
\f Ctrl-L  走行换页\014
\n Ctrl-J  新行\012
\r Ctrl-M 回车\015
\t  Ctrl-I  tab键\011
\v Ctrl-X \030 注意这些控制字符,如果想在linux下输入,如我们可能需要输入^M这种字符,只需ctrl+V+M同时按下即可。

字符替换

[root@localhost ~]# echo "hello world" | tr "a-z" "A-Z"
HELLO WORLD
[root@localhost ~]# echo "hello world" | tr "a-l" "A-Z"
HELLo worLD
[root@localhost ~]# echo "hello world" | tr "a-z" "A-H"
HEHHH HHHHD

第一行输出就是将小写换成大写。
第二行输出将小写中的a-l分别换成A-L,而将小写中的l以后的字符都不替换。
第三行输出将小写中的a-h换成A-H,而h以后的字符都换成H,因为后者的替换空间没有前面的字符空间大,所以就重复后面的H,相当于后面的字符是A-HHH......HHHHH。

如果我们想要进行大小写转换,可以按下面的输入:
tr "a-z" "A-Z" < inputfile

去除重复字符
这个时候,所用的选项是-s选项,如:

[root@localhost ~]# echo "hello world,root" | tr -s "ao"
hello world,rot
[root@localhost ~]# echo "hello world,root" | tr -s "lo"
helo world,rot
[root@localhost ~]# echo "hello world,root" | tr -s "a-z"
helo world,rot
[root@localhost ~]# echo "hello world,root" | tr -s "0-9"
hello world,root

第一行表示将输入字符串中的包含在"ao"字符集中的重复字符去掉,只留一个。因为"hello world,root",只有o满足条件,所以将root变成rot,把中间的两个o变成一个。
第二行将hello和root两个字符都压缩了。
第三行表示将a-z中的除复字符都去掉。
第三行表示将字符串中的重复的且重复字符在0-9字符集中的字符去掉,这里没有。

如果我们想要去掉空行,可以这样操作:
tr -s "\n" < inputfile 或者 tr -s "\012" <inputfile // 这两个是一样的。  
就是将重复的换行符去掉,只留一个。

删除字符
-d选项和-s选项类似,只不过-d选项会删除所有出现的字符。

[root@localhost ~]# echo "hello world,root" | tr -d "a-h"
llo worl,root
[root@localhost ~]# echo "hello world,root,2012" | tr -d "a-z"  ,,2012
[root@localhost ~]# echo "hello world,root,2012" | tr -d "0-9"
hello world,root,

Linux下的tr编辑器命令详解相关推荐

  1. linux paste 变量,Linux下的paste合并命令详解

    paste单词意思是粘贴.该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反. 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同.paste将按行将不同文件行信息放在一 ...

  2. linux电脑关机命令是什么问题,linux下正常关机之命令详解 -电脑资料

    系统启动的时候生成一个文件,正常关机的时候会删除这个文件,管理过程中出现故障的机率. 步骤: 在/etc/rc.d/init.d/下编程脚本. 判断是否正常关机,和生成文件的脚本:touch-file ...

  3. md0和md1linux软raid,linux下Raid及mdadm命令详解

    linux下Raid及mdadm命令详解 1.RAID级别:仅代表磁盘组织方式不同,没有高低之分: Raid常用种类:raid0,raid1,raid5,raid10,raid01 jbod:叠加硬盘 ...

  4. Linux下的压缩解压缩命令详解

    1.zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip unzip -o -d /home ...

  5. linux fuser主机关闭,linux 下强制umount+Fuser命令详解

    fuser -km /soft umount /soft Linux命令Fuser详解 使用文件或者套节字来表示识别进程.我常用的他的两个功能:查看我需要的进程和我要杀死我查到的进程比如当你想umou ...

  6. linux下的arp刷新命令详解,linux arp 命令常用参数详解

    linux arp 命令常用参数详解 linux arp 命令常用参数详解 显示和修改地址解析协议(ARP)使用的"IP 到物理"地址转换表. ARP -s inet_addr e ...

  7. linux压缩命令讲解,Linux下的压缩解压缩命令详解

    linux zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip unzip - ...

  8. linux下route路由设置命令详解

    # route -n                                                  // 显示路由表,哪条在前就用哪条,都没有就用default # route a ...

  9. linux下last与lastb命令详解

    在linux系统中,last与lastb命令用来列出目前与过去登录系统的用户相关信息.指令英文原义: last, lastb - show listing of last logged in user ...

最新文章

  1. CGContextSaveGState与CGContextRestoreGState的作用
  2. oss客户端工具_阿里云服务器ECS上使用ossfs工具挂载阿里云OSS存储
  3. 用node搭一个静态服务
  4. jsp 构建单页应用_如何使用服务器端Blazor构建单页应用程序
  5. php开发经典问题,PHP开发常见问题集锦(一)
  6. 数字信号处理--7.3--基础篇
  7. for each in for in for of
  8. Python类的私有属性
  9. 连上WiFi后,笔记本离路由器比较近时,电脑播音偶尔卡音
  10. linux终端无法输入大写字母,linux不能打大写字母
  11. html文件如何显示大纲视图,如何使用大纲视图生成章节目录
  12. 这些 Google 高级搜索技巧,你都知道么?
  13. 这世上本来没有路,走的人多了,也便成了路
  14. 扫地机器人充电红灯闪烁响_智能扫地机器人的充电错误提示与处理
  15. SQlServer数据库基础
  16. 国立台湾大学_郭彦甫老师_MATLAB课程练习
  17. c语言变量声明放在开头,C语言变量声明问题——变量定义一定要放在所有执行语句/语句块的最前面吗?...
  18. 拍立得软件测试初学者,轻奢主义时尚入门之选 富士X-T100评测
  19. 【百度地图】——百度地图API获取经纬度、地址及周边兴趣点
  20. Python爬取马蜂窝各城市游记总数

热门文章

  1. 知识图谱(八)——知识存储和检索
  2. 原始需求的来龙去脉和核心要求
  3. flutter 实现不可滚动的ListView构建器
  4. 信息系统项目管理师范围管理
  5. 如何在MacOS上创建第一个iOS Flutter应用
  6. redhat7.4启动telnet和SSH服务,修改IP地址
  7. 7-20上午刷题未知点集合
  8. jsp mysql demo_利用JSP+MYSQL实现注册+登入的demo----0001
  9. 神策数据罗彦博:如何正确使用漏斗分析提升转化?
  10. 实验一 小凡和VMware虚拟机的使用练习