tr命令是linux下的一个命令,那么它的语法和用途是什么呢?下面由学习啦小编为大家整理了linux shell tr命令的相关知识,希望大家喜欢!

linux shell tr命令

tr是translate的简写,亦即翻译,但是遗憾的是,它不能翻译句子,只能翻译单个字符。

1 工作原理

先记住一点,tr命令不接受指定的文件参数,而只是对标准输入进行翻译。好了,记住这点后,我们继续。

tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都会被替换为SET2中相应位置上的字符,简单吧!

2 例子

tr的例子其实都大同小异,看一个最简单的例子:

我们有一个包含了四个人身高的数据文件,名字叫height.txt,它的内容是这样的:

[rocrocket@rocrocket programming]$ cat height.txt

1.79 1.83

1.65 1.59

我们想搞一个恶作剧,将所有人的身高从1米级别都提高到2米级别,呵呵,一个tr就可以搞定。

[rocrocket@rocrocket programming]$ tr 1 2 < height.txt

2.79 2.83

2.65 2.59

希望你没有忘记,tr只处理标准输入,所以我们需要将height.txt通过重定向指到tr的标准输入才可以。

3 用tr来修改文件中的间隔符

当使用cut的时候,通常会被间隔符问题所困扰,我们这个时候可以考虑到tr这个命令。

还是以height.txt文件为例,其中的间隔符是空格,我们把它修改为制表符吧!

[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt

1.79 1.83

1.65 1.59

这里有一个小知识点,像制表符、换行符这些字符不好表示,我们可以考虑使用ASCII的八进制形式来表示,制表符的八进制形式是11,回车是15,换行是12。而在tr命令中,可以使用\nnn形式表示八进制形式的字符。如果你实在记不住这些编号,那么用\t表示制表符你总该可以记住吧!(\n代表新行,\r代表回车)

这下,你应该可以理解上面那条命令的作用了吧。如果你仍然怀疑,那么,看看下面这条命令,你就该心服口服了:

[rocrocket@rocrocket programming]$ tr ‘ ‘ ‘\11′ < height.txt |sed -n l

1.79\t1.83$

1.65\t1.59$

看!空格的的确确被替换成了制表符喽!

4 使用tr把文章中的小写都转换成大写

这个正是tr所擅长的地方。

加入我们拥有一个文件叫做word.txt,里面包含的内容是AbcdE。

那么最简单的替换大小写的方法是:

[rocrocket@rocrocket programming]$ cat word.txt

AbcdE

[rocrocket@rocrocket programming]$ tr ‘a-z’ ‘A-Z’ < word.txt

ABCDE

5 [CHAR*]

这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止

例子:

[rocrocket@rocrocket programming]$ cat number.txt

1234567890

[rocrocket@rocrocket programming]$ tr ‘1-5′ ‘[A*]‘ < number.txt

AAAAA67890

6 [CHAR*REPEAT]

这也是SET2专用的设定,功能是将CHAR重复REPEAT次数。其中REPEAT次数可以用八进制数表示,但记得要以0开头表示八进制数。

例子:

[rocrocket@rocrocket programming]$ tr ‘1-9′ ‘[A*5]BCDE’ < number.txt

AAAAABCDE0

7 在tr中表示集合的符号

[:alnum:] :所有字母字符与数字

[:alpha:] :所有字母字符

[:blank:] :所有水平空格

[:cntrl:] :所有控制字符

[:digit:] :所有数字

[:graph:] :所有可打印的字符(不包含空格符)

[:lower:] :所有小写字母

[:print:] :所有可打印的字符(包含空格符)

[:punct:] :所有标点字符

[:space:] :所有水平与垂直空格符

[:upper:] :所有大写字母

[:xdigit:] :所有 16 进位制的数字

例子:

将所有的数字都转换为字符x。

[rocrocket@rocrocket programming]$ tr [:alnum:] ‘[x*]‘ < number.txt

xxxxxxxxxx

8 tr里面包含SET1和SET2,那如果出现两个集合的大小不同的情况,tr如何处理

这个问题,最好的解决办法就是做实验啊。

第一种情况是SET1>SET2:

[rocrocket@rocrocket programming]$ tr 1-5 AB < number.txt

ABBBB67890

结论一下子就出来了,SET1中多出来的字符都会和SET2中最后一个字符相对应。

第二种情况SET1

[rocrocket@rocrocket programming]$ tr 1-3 ABCDE < number.txt

ABC4567890

很明了,SET2中多余的部分将被抛弃。

9 tr命令的-s选项

这个-s选项,是专门针对SET1起作用的,意思是如果发现有连续的SET1里的字符,就把它们缩减为1个。

一个很经典的应用就是把不规律的空格缩减为一个空格:

[rocrocket@rocrocket programming]$ cat spaces.txt

How are you?

Fine! Thank you!

[rocrocket@rocrocket programming]$ tr -s ‘ ‘ ‘ ‘ < spaces.txt

How are you?

Fine! Thank you!

效果很明显,用户很满意。恩!

10 -d选项

-d选项是用来删除字符用的。格式是这样的:tr -d charset

[rocrocket@rocrocket programming]$ tr -d ‘ ‘ < spaces.txt

Howareyou?

Fine!Thankyou!

看,该有的空格都没了…这就是-d的作用,把空格都删除了!

如果你想把文章中的数字都删除,就tr -d [0-9] < filename就可以了。

语法:

tr [options] [source-char-list] [replace-char-list] < filename

用途:

转换字符,例如:将大写字符转换成小写字符。选项可以让你指定所要删除的字符,以及将一串重复出现的字符浓缩成一个。

常用选项:

-c: 取source-char-list的反义,所有不在source-char-list中的字符。常与-d , -s配合使用。

-d: 删除source-char-list中所定义的字符。

-s: 浓缩重复的字符。如果标准输入中连续重复出现source-char-list里所列的字符,则将其浓缩成一个。或者将其浓缩成replace-char-list中的字符。

tr 'X' 'x' 把所有大写X转换成小写x

tr '()' '{}' 把( )替换成{ }

tr '[a-z]' '[A-Z]' 把所有小写字母变成大写字母

tr '[A-Z]' '[N-ZA-M]' 把字符A-M分别转换成N-Z,而N-Z转换成A-M

tr -s ' ' ' ' 把多个空格转换成单个空格

tr -d '[0-9]' 删除所有数字

引用:[a-z] a-z内的字符组成的字符串。

[A-Z] A-Z内的字符组成的字符串。

[0-9] 数字串。

/octal 一个三位的八进制数,对应有效的A S C I I字符。

[O*n] 表示字符O重复出现指定次数n。因此[ O * 2 ]匹配O O的字符串。

大部分t r变种支持字符类和速记控制字符。

字符类格式为[:c l a s s ],包含数字、希腊字母、空行、小写、大写、c n t r l键、空格、点记符、图形等等。

下表包括最常用的控制字符的速记方式及三位八进制引用方式。

当用一个单字符替换一个字符串或字符范围时,注意字符并不放在方括号里( [ ])。一些系统也可以使用方括号,例如可以写成[“\ 0 1 2”]或“\ 0 1 2”,t r也允许不加引号,因此命令中看到单引号而不是双引号时也不要感到奇怪。

像大多数系统工具一样, t r也受特定字符的影响。因此如果要匹配这些字符,需使用反斜线屏蔽其特殊含义。例如,用\ {指定花括号左边可以屏蔽其特殊含义。

代码:

速记符含义八进制方式

\ a Ctrl-G 铃声\ 0 0 7

\ b Ctrl-H 退格符\ 0 1 0

\f Ctrl-L 走行换页\ 0 1 4

\n Ctrl-J 新行\ 0 1 2

\ r Ctrl-M 回车\ 0 1 5

\t Ctrl-I tab键\ 0 11

\ v Ctrl-X \ 0 3 0

去除重复出现的字符

下面文件包含了一些打印错误。这种情况时常发生,例如在v i编辑器中,偶尔按住一个键不放。

代码:

And the cowwwwws went homeeeeeeeeeeeee

Or did theyyyyyyyyyyyyy

如果要去除重复字母或将其压缩在一起,使用- s选项。因为都是字母,故使用[ a - z ][A-Z]。输入文件重定向到t r命令。

dtdlut@dtdlut:~$ tr -s "[a-z][A-Z]" < apps.txt

And the cows went home

Or did they

删除空行

要删除空行,可将之剔出文件。下面是一个文件p l a n e . t x t。文本间有许多空行。

plane.txt

9879932 Spitfire

190992 Lancaster

238991 Typhoon

dtdlut@dtdlut:~$ tr -s "\n" < plane.txt

plane.txt

9879932 Spitfire

190992 Lancaster

238991 Typhoon

大写到小写

除了删除控制字符,转换大小写是t r最常用的功能。为此需指定即将转换的小写字符[ a - z ]和转换结果[ A - Z ]。

第一个例子,t r从一个包含大小写字母的字符串中接受输入。

tr "[a-z]" "[A-Z]" 或者 tr "[:lower:]" "[:upper:]"

dtdlut@dtdlut:~$ echo "May Day,May Day,Going Down.." | tr "[a-z]" "[A-Z]"

MAY DAY,MAY DAY,GOING DOWN..

删除指定字符

偶尔会从下载文件中删除只包含字母或数字的列。需要结合使用- c和- s选项完成此功能。

下 面的文件包含一个星期的日程表。任务是从其中删除所有数字,只保留日期。日期有大写,也有小写格式。因此需指定两个字符范围[ a - z ]和[ A - Z ],命令tr -cs "[a-z][A-Z]" "\n"将文件每行所有不包含在[ a - z ]或[ A - Z ](所有希腊字母)的字符串放在字符串replace-char-list中并转换为一新行。- s选项表明压缩所有新行, - c表明取source-char-list的反义。

dtdlut@dtdlut:~$ cat diray.txt

mondy 1all0:5b0

Tuesday 15:00

wednesday 15:30

thurday 10:30

Fridya 09:20

dtdlut@dtdlut:~$ tr -cs "[a-z][A-Z]" "\n" < diray.txt

mondy

all

b

Tuesday

wednesday

thurday

Fridya

linux shell tr命令,linux shell tr命令详解相关推荐

  1. python调用adb shell命令_Python之使用adb shell命令启动应用的方法详解

    Python之使用adb shell命令启动应用的方法详解 一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具 ...

  2. linux xxx命令,linux命令ps aux|grep xxx详解

    对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在运 ...

  3. 编程实现linux中的who命令功能,Linux who命令简介及使用方法详解

    玩蛇网推荐图文教程:python 列表 本文是关于Linux who命令简介及使用方法详解一文.如果你是一名系统管理员,可能需要需要在一个特定的时间点都有谁活跃在系统上.以便必须严密监视我们的服务器. ...

  4. linux中替换命令详解,linux中sed命令字符串替换的用法详解

    Linux系统中sed命令可以将字符串批量替换,省去了很多麻烦,下面由学习啦小编为大家整理了linux系统中sed命令字符串替换的用法详解,希望对大家有帮助! linux中sed命令字符串替换的用法详 ...

  5. 怎么打开python shell_Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发 ...

  6. linux命令ps -aux|grep xxx详解

    linux命令ps -aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大 ...

  7. linux cp -r 参数,Linux系统中cp命令的参数及用法详解

    Linux系统中cp命令主要是用来复制文件或者目录.下面由学习啦小编为大家整理了Linux系统中cp命令的参数及用法详解的相关知识,希望对大家有帮助! Linux系统中cp命令的参数及用法详解:参数说 ...

  8. linux dig命令的安装和使用详解

    linux dig命令的安装和使用详解 什么是dig命令 Dig是Domain Information Gopher的缩写,是一种DNS查找实用程序,用于探测DNS服务器并解决与DNS服务器相关的问题 ...

  9. linux添加目录命令权限,linux chmod命令设置目录/文件权限详解

    首页 > Linux教程 > 常用命令 > chmod 文件权限 linux chmod命令设置目录/文件权限详解 linux中chmod命令用于改变系统文件或目录的访问权限,用数字 ...

  10. linux环境下blastn命令怎么用,Linux环境下通配符及特殊符号使用详解

    Linux环境下通配符及特殊符号使用详解 我们现在来介绍通配符的使用,通过通配符的过滤,快速找到想找的文件和目录,比如/etc/目录下有上千个目录和文件,不使用通配符想找一个目录和文件是非常麻烦的和花 ...

最新文章

  1. Linux下修改Mysql的用户(root)的密码
  2. 对quake3源代码的学习与研究初步的计划
  3. 【Python-ML】神经网络-多层感知器增加梯度检验
  4. 机器视觉:Caffe Python接口多进程提取特征
  5. SSM中进行Junit单元测试时无法注入service
  6. python网络聊天器多线程版
  7. python如何为饼图添加标题_python – Matplotlib子图标题,图标题格式
  8. 一加8系列有望明年二季度发布:配备双曲面打孔屏
  9. data 谷歌浏览器更改user 路径_chrome修改默认用户目录
  10. 若只有4KB内存可用,该如何打印数组中所有重复的元素
  11. fota mcsync洛达检测_详细解析最新推出的顶配版二代悦虎主板洛达1562M数字音频长续航款...
  12. 深度学习笔记_基本概念_卷积网络中的通道channel、特征图feature map、过滤器filter和卷积核kernel
  13. 下列( )软件不能编辑html语言,2016年职称计算机Dreamweaver考试题库五
  14. 关于Linux消息队列的简单说明、使用、编码
  15. 【微信授权登录】Scope 参数错误或没有 Scope 权限
  16. 呼叫中心来电弹屏功能怎么样
  17. 数据分析能力的8个等级
  18. Android 获取彩信文本内容及 发送时间 发送人
  19. 水雨情监测 水库水雨情在线监测
  20. U盘能识别,但不显示盘符,磁盘管理器也看不到

热门文章

  1. [第五章] 深入理解计算机系统第三版 家庭作业参考答案
  2. 计算机领域英文单词怎么读
  3. linux 运维工程师的前景怎么样?
  4. 北京航空航天大学研究生院计算机科学与技术哪个方向偏嵌入式,北京航空航天大学研究生专业介绍:计算机科学与技术...
  5. Utorrent 设置
  6. hcia是什么等级的证书_HCIA是什么等级的证书
  7. 大陆二代居民身份证校验代码
  8. ios自制电话本-swift
  9. 项目管理相关认证简要介绍(1)- 体系
  10. PCB电路板去耦电容配置原则有哪些?