转换和删除重复命令tr
前几篇文章介绍了几个用于处理字符的命令和工具,然而在处理大小写转换、删除重复字符等任务时,这些命令处理起来相对较为麻烦。这里将简单介绍Linux下自带的tr命令,相对于其他命令而言,其语法较为简单,比较方便记忆。
一、tr命令的基本格式
tr命令用于处理字符转换、删除重复字符等任务。
- 命令格式:
tr [option] [string1] [string2]
在tr的基本命令格式中,string1用于查询字符串,string2用于转换查询到的字符串。tr命令不能读取文件,如果要转换文件中的内容,可以使用重定向输入或管道的方法。
- 常用选项:
c:使用string1字符集中的补集替换,要求的字符集为ASCII。
d:删除string1中包含的所有字符。
s:将所有重复出现的字符进行压缩,只保留一个字符,即删除重复的字符。
在使用tr命令时,还需要指定string1和string2这两个格式化字符串,字符串的形式可以是字符的范围、单个字符、多字符列表等。常见的字符串形式及其含义如下:
[a-z]:小写字母a-z范围内的字符及其组合而成的字符串。
[A-Z]:大写字母A-Z范围内的字符及其组合而成的字符串。
[0-9]:数字0-9范围内的字符及其组合。
[C*n]:这个表达式中,C表示字符或字符组合,n表示重复出现的次数。即字符或字符组合出现n次的字符串。
除了以上这些常见的字符串形式以外,tr命令还支持在字符串中查询和处理一些特殊的字符,这些字符通常都使用一个八进制数字表示。常见的特殊字符及其对应的八进制表示形式如下:
\012:新的一行,在其他命令中经常使用\n表示。
\011:相当于一个Tab键,有些命令使用\t表示。
\015:Enter键(即换行符),在其他命令中经常使用\r表示。
\014:新的一页,在其他命令中经常使用\f表示。
二、字符转换
使用命令时,最常见的任务是对一个字符串执行转换。
(1)最常见的字符串转换是大小写的转换。例如需要将一个字符串中的字符全部转换为大写:
[root@localhost test]# echo "this is a test string." | tr -s "[a-z]" "[A-Z]"
THIS IS A TEST STRING.
(2)由于tr命令不能直接从文本中读取并转换文本,因此通常都使用重定向输入或管道传递的方法。例如需要将文本文件test中的字符执行大小写转换:
[root@localhost test]# cat test
this is the first line.
this is the second line.
[root@localhost test]# tr -s "[a-z]" "[A-Z]" <test
THIS IS THE FIRST LINE.
THIS IS THE SECOND LINE.
[root@localhost test]# cat test
this is the first line.
this is the second line.
原文件test中的文本并没有改变。
(3)除了可以使用[a-z]、[A-Z]这样的形式外,还可以使用一个列表的形式。例如需要将test中的小写字母tfls转换成大写字母:
[root@localhost test]# tr -s "tfls" "TFLS" <test
ThiS iS The FirST Line.
ThiS iS The Second Line.
注意:列表中的字符是一一对应的(t-T、f-F、l-L、s-S),另外需要注意此处列表与正则表达式中的列表的区别。
(4)除此之外,tr命令还可以对文本进行格式转换,例如:
[root@localhost test]# cat test1
2821020225#Liulu#0#A#B#0\
2821020115#Liumi#B#C#0#0\
2721020321#Xuli#0#D#A#0\
2921020632#Xiayu#A#C#0#0\
2721010409#Liwei#B#C#0#D\
2921050313#Heli#B#0#D#0\
2721030227#Wangtao#C#0#D#0\
[root@localhost test]# tr -s "#" "\t" <test1
2821020225 Liulu 0 A B 0\
2821020115 Liumi B C 0 0\
2721020321 Xuli 0 D A 0\
2921020632 Xiayu A C 0 0\
2721010409 Liwei B C 0 D\
2921050313 Heli B 0 D 0\
2721030227 Wangtao C 0 D 0\
三、删除字符
tr命令的另一个重要功能是用来删除字符,包括删除重复字符和自定义的字符集等。
(1)使用tr命令删除重复字符时,需要指定字符串或文本中可能存在重复的字符集合,因此仅需要使用string1即可。例如:
[root@localhost test]# echo "HHHHeeeelloo" | tr -s "Heo"
Hello
(2)还可以使用一个巨大的字符集删除可能存在的重复字符。例如要删除所有字母的重复:
[root@localhost test]# echo "HHHHeeeellooo" | tr -s "[a-z][A-Z]"
Helo
(3)也可以删除文本中的一些特殊字符,例如删除文本文件中多余的空行:
[root@localhost test]# cat test2
a b c
[root@localhost test]# tr -s "\n" <test2
a
b
c
(4)也可使用八进制数表示特殊字符。删除多余空行的命令也可以写成:
[root@localhost test]# tr -s "\012" <test2
a
b
c
(5)tr命令还可以用来删除特定的字符集:
[root@localhost test]# echo "My name is Jhon." | tr -d "msn"
My ae i Jho.
注意:tr命令在处理替换和删除时,采用逐字符查询处理的方法。
转换和删除重复命令tr的更多相关文章
- tr命令-转换和删除字符
tr 转换和删除字符 支持标准输入 格式 tr [OPTION]...SET1[SET2] Translate, squeeze, and/or delete characters from stan ...
- tar命令,重定向,正则表达式,添加删除用户,tr命令,sort排序
rpm包仅用于 redhat suse redflag 若是源代码包的话,那就都适用linux下面的备份,差不多就是用tar打包 tar命令用途:制作归档文件,释放归档文件格式:tar [选项]... ...
- tr转换或删除字符
字符处理命令:tr —— 转换或删除字符 逐个字符处理而不是处理单词的tr [OPTION]... SET1 [SET2] -d: 删除出现在字符集中的所有字符 tr ab AB
- SQL server 存储过程 C#调用Windows CMD命令并返回输出结果 Mysql删除重复数据保留最小的id C# 取字符串中间文本 取字符串左边 取字符串右边 C# JSON格式数据高级用法
create proc insertLog@Title nvarchar(50),@Contents nvarchar(max),@UserId int,@CreateTime datetimeasi ...
- linux用命令删除重复行
文本处理时,经常要删除重复行,下面是三种方法 第一,用sort+uniq,注意,单纯uniq是不行的. sort -n test.txt | uniq 第二,用sort+awk命令,注意,单纯awk同 ...
- Linux查找并删除重复文件的命令行fdupes工具,dupeGuru图形工具
查了几十个网页,找到这个接近满意的解决方案http://unix.stackexchange.com/questions/146197/fdupes-delete-files-aft... 不过正则里 ...
- Linux Shell 命令--tr
tr 用来从标准输入中通过替换或删除操作进行字符转换 -c或--complerment 取代所有不属于第一字符集的字符. -d ...
- 命令——tr
文本处理工具命令——tr 一帮助说明 TR() User Commands TR() NAME tr - translate or delete characters SYNOPSIS tr [OPT ...
- arts打卡 从排序数组中删除重复项
Algorithm 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组 ...
随机推荐
- FastReport.Net使用:[22]地图(Map)控件
标记有学生地区 1.在报表中放一个地图控件 将地图控件放在标题区即可,其他栏目删除. 2.双击地图控件进行地图添加. 可以再网上下载到地图数据,ESRI shapefile文件,本例中找了个省会城市地 ...
- 【BZOJ 1018】线段树 **
1018: [SHOI2008]堵塞的交通traffic Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3242 Solved: 1084[Submi ...
- 我的OI生涯番外篇
番外篇 转眼间我学oi已经一年了,可回头想想这一年来的收获也没有什么,大部分时间都荒废掉了. 下半年开学后,学物竞的王洋转来了我们电竞,虽然他之前是我的同班同学但也没怎么交流过. 这下我们又成为了oi ...
- Java并发(十):读写锁ReentrantReadWriteLock
先做总结: 1.为什么用读写锁 ReentrantReadWriteLock? 重入锁ReentrantLock是排他锁,在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服 ...
- 安卓中AsyncTask的基本使用
安卓中AsyncTask的基本使用 使用场景介绍 在安卓开发中,我们经常需要访问互联网资源,这些访问是都需要在后台线程中去完成的,因为安卓的UI线程不允许执行耗时任务.然而,后台线程是不可以修改安卓的 ...
- jdk8 流操作
二.流 2.1 流介绍 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,你可以把它们看成遍历数据集的高级迭代器.此外,流还可以 ...
- EF6 MVC5译文
Contoso大学的Web应用程序 你在本教程中将建立一个简单的大学网站. 用户可以查看和更新学生信息,当然也包括教师的.下列图表是你将创建的应用程序截屏. 本网站的UI样式来源于内置的模板,所以教程 ...
- 独立成分分析 与 功能连接之间的关联尝试 by 张高燕
在处理fMRI数据时,使用空间ICA的方法. 将一个四维的fMRI数据分解为空间pattern与时间序列的乘积. //这里的pattern=component 其中每一pattern的时间序列 ...
- [翻译] SFRoundProgressCounterView 带有进度显示的倒计时视图
SFRoundProgressCounterView 带有进度显示的倒计时视图 https://github.com/simpliflow/SFRoundProgressCounterView A c ...
- Basic Messager
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...