什么是tr命令?tr,translate的简写,translate的翻译:

[trænsˈleit]

vi. 翻译, 能被译出

vt. 翻译, 解释, 转化, 转变为, 调动

在这里用到的意思是转化,转变,转换,在linux下输入tr --help查看一下提示:

  1. amosli@amosli-pc:~$ tr --help
  2. Usage: tr [OPTION]... SET1 [SET2]
  3. Translate, squeeze, and/or delete characters from standard input,
  4. writing to standard output.
  5.  
  6. -c, -C, --complement use the complement of SET1
  7. -d, --delete delete characters in SET1, do not translate
  8. -s, --squeeze-repeats replace each input sequence of a repeated character
  9. that is listed in SET1 with a single occurrence
  10. of that character
  11. -t, --truncate-set1 first truncate SET1 to length of SET2
  12. --help display this help and exit
  13. --version output version information and exit
  14.  
  15. SETs are specified as strings of characters. Most represent themselves.
  16. Interpreted sequences are:
  17.  
  18. \NNN character with octal value NNN (1 to 3 octal digits)
  19. \\ backslash
  20. \a audible BEL
  21. \b backspace
  22. \f form feed
  23. \n new line
  24. \r return
  25. \t horizontal tab
  26. \v vertical tab
  27. CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order
  28. [CHAR*] in SET2, copies of CHAR until length of SET1
  29. [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0
  30. [:alnum:] all letters and digits
  31. [:alpha:] all letters
  32. [:blank:] all horizontal whitespace
  33. [:cntrl:] all control characters
  34. [:digit:] all digits
  35. [:graph:] all printable characters, not including space
  36. [:lower:] all lower case letters
  37. [:print:] all printable characters, including space
  38. [:punct:] all punctuation characters
  39. [:space:] all horizontal or vertical whitespace
  40. [:upper:] all upper case letters
  41. [:xdigit:] all hexadecimal digits
  42. [=CHAR=] all characters which are equivalent to CHAR
  43.  
  44. Translation occurs if -d is not given and both SET1 and SET2 appear.
  45. -t may be used only when translating. SET2 is extended to length of
  46. SET1 by repeating its last character as necessary. Excess characters
  47. of SET2 are ignored. Only [:lower:] and [:upper:] are guaranteed to
  48. expand in ascending order; used in SET2 while translating, they may
  49. only be used in pairs to specify case conversion. -s uses SET1 if not
  50. translating nor deleting; else squeezing uses SET2 and occurs after
  51. translation or deletion.

全是英文?翻译过来看下:

  1. tr [选项]… 集合1 [集合2]
  2.  
  3. 选项说明:
  4.  
  5. -c, -C, complement 用集合1中的字符串替换,要求字符集为ASCII
  6.  
  7. -d, delete 删除集合1中的字符而不是转换
  8.  
  9. -s, squeeze-repeats 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
  10.  
  11. -t, truncate-set1 先删除第一字符集较第二字符集多出的字符
  12.  
  13. 字符集合的范围:
  14.  
  15. \NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
  16. \\ 反斜杠
  17. \a Ctrl-G 铃声
  18. \b Ctrl-H 退格符
  19. \f Ctrl-L 走行换页
  20. \n Ctrl-J 新行
  21. \r Ctrl-M 回车
  22. \t Ctrl-I tab
  23. \v Ctrl-X 水平制表符
  24. CHAR1-CHAR2 CHAR1 CHAR2的所有字符按照ASCII字符的顺序
  25. [CHAR*] in SET2, copies of CHAR until length of SET1
  26. [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0
  27. [:alnum:] 所有的字母和数字
  28. [:alpha:] 所有字母
  29. [:blank:] 水平制表符,空白等
  30. [:cntrl:] 所有控制字符
  31. [:digit:] 所有的数字
  32. [:graph:] 所有可打印字符,不包括空格
  33. [:lower:] 所有的小写字符
  34. [:print:] 所有可打印字符,包括空格
  35. [:punct:] 所有的标点字符
  36. [:space:] 所有的横向或纵向的空白
  37. [:upper:] 所有大写字母

tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。

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

1、带有最常用选项的tr命令格式为

  1. tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file

这里:

  • -c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
  • -d 删除字符串1中所有输入字符。
  • -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
  • input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。

2、字符范围

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

tr中特定控制字符的不同表达方式

  1. 速记符含义八进制方式
  2. \a Ctrl-G 铃声\007
  3. \b Ctrl-H 退格符\010
  4. \f Ctrl-L 走行换页\014
  5. \n Ctrl-J 新行\012
  6. \r Ctrl-M 回车\015
  7. \t Ctrl-I tab\011
  8. \v Ctrl-X \030

实例:

1、将文件file中出现的"abc"替换为"xyz"

  1. [root@Gin scripts]# cat t.txt
  2. abc
  3. [root@Gin scripts]# cat t.txt |tr "abc" "xyz"
  4. xyz
  5. [root@Gin scripts]# cat t.txt
  6. abc
 
【注意】这里,凡是在t.txt文件中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。这里的替换不修改源文件

2、使用tr命令“统一”字母大小写

  1. [root@Gin scripts]# cat file
  2. abc
  3. [root@Gin scripts]# cat file|tr [a-z] [A-Z]
  4. ABC

大写转小写只需要把tr后面的参数换个位置即可!

3、把文件中的数字0-9替换为a-j

  1. [root@Gin scripts]# cat file|tr [0-9] [a-j]
  2. abcdefghij

4、删除文件file中出现的"Snail"字符

  1. [root@Gin scripts]# cat file
  2. what is Snail
  3. [root@Gin scripts]# cat file|tr -d "Snail"
  4. wht s
  5. [root@Gin scripts]# cat file
  6. what is Snail
【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。

5、删除文件file中出现的换行'\n'、制表'\t'字符

  1. # cat file | tr -d "\n\t"
不可见字符都得用转义字符来表示的,这个都是统一的。

7、删除空行

  1. # cat file | tr -s "\n" > new_file

8、删除Windows文件“造成”的'^M'字符

  1. # cat file | tr -d "\r"
  2. 或者
  3. # cat file | tr -s "\r" "\n"
【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者

9、用空格符\040替换制表符\011

  1. # cat file | tr -s "\011" "\040"

10、把路径变量中的冒号":",替换成换行符"\n"

  1. # echo $PATH | tr -s ":" "\n"

实际应用1,加密解密:

  1. [root@Gin scripts]# echo 12345|tr '0-9' '987654321' ## 加密
  2. 87654
  3. [root@Gin scripts]# echo 87654|tr '987654321' '0-9' ## 解密
  4. 12345

上面是一个非常有趣的小例子,通过映射来实现简单的加密解密,看懂这个例子,可以接着往下看古罗马时期发明的凯撒加密的一种变体ROT13

  1. [root@Gin scripts]# echo "hi,this is amosli" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
  2. uv,guvf vf nzbfyv
  3. [root@Gin scripts]# echo "uv,guvf vf nzbfyv" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
  4. hi,this is amosli

ROT13是它自己本身的逆反;也就是说,要还原ROT13,套用加密同样的算法即可得,故同样的操作可用再加密与解密。非常神奇!

实际应用2,字符集补集:

  1. tr -c [set1] [set2]

set1的补集意味着从这个集合中包含set1中没有的所有字符。最典型的用法就是从输入文本中将不在补集中的所有字符全部删除。例如:

  1. [root@Gin scripts]# echo "hello 123 world " | tr -d -c '0-9 \n'
  2. 123

在这里,补集中包含了除数字、空格字符和换行符之外的所有字符,因为指定了-d,所以这些字符全部都会被删除。

实际应用3,用tr压缩字符:

  1. [root@Gin scripts]# echo "GNU is not UNIX . Recursicve right?" | tr -s ' '
  2. GNU is not UNIX . Recursicve right?

使用-s参数可以压缩字符串中重复的字符。看另一个例子:

  1. [root@Gin scripts]# cat sum.txt
  2. 5
  3. 4
  4. 3
  5. 5
  6. 4
  7. 3
  8. [root@Gin scripts]# cat sum.txt|echo $[ $(tr '\n' '+') 0 ]
  9. 24
  10. [root@Gin scripts]# cat sum.txt|echo $[ $(tr '\n' '+') ]
  11. -bash: 5+4+3+5+4+3+ : syntax error: operand expected (error token is "+ ")

这里,运用tr实现了加法运算, tr '\n' '+'使用换行符来替换为'+'然后连接起来,最后多出来一个'+'再接上数字0即实现了加法。

linux命令总结之tr命令的更多相关文章

  1. linux系统之tr命令

    tr命令介绍以及使用 目录: 1.tr命令的介绍 2.tr命令格式 3tr命令使用项. 4.常见的tr命令的使用 tr命令介绍 从标准输入中翻译.压缩和/或删除字符,写入标准输出,说白了就转换和删除字 ...

  2. 【Linux基础】tr命令替换和删除字符

    1.tr命令 tr可以对来自标准输入的字符进行替换.压缩和删除,可以将一组字符变成另外一组字符.通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其 ...

  3. linux中cut命令与tr命令

    目录 一:linux中cut命令 1.cut 命令作用 2.参数 3.参数案例解析: 二:tr命令 1.tr命令作用 2.tr命令格式 3.tr命令参数 4.案例解析: 一:linux中cut命令 1 ...

  4. Linux就该这么学——新手必须掌握的命令之文件编辑命令组

    cat 命令 用途 : 用于查看纯文本文件 格式 : cat [选项] [文件] 示例 : more 命令 用途 : 用于查看纯文本文件(内容较多的),可以用”Enter” 键或者”Space”键向下 ...

  5. linux sort,uniq,cut,wc,tr命令详解

    sort是在Linux里非常常用的一个命令,对指定文件进行排序.去除重复的行 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sor ...

  6. 《tr命令-优化版》-linux命令五分钟系列之二十五

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  7. 《tr命令》-linux命令五分钟系列之六

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  8. linux命令(42):tr命令

    Linux tr命令 Linux tr 命令用于转换或删除文件中的字符. tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备. 语法: tr [-cdst][--help][ ...

  9. linux常用命令:tr 命令

    tr 命令实现字符转换功能,其功能类似于 sed 命令,但是,tr 命令比 sed 命令简单.也就是说,tr 命令能实现的功能,sed 命令都可以实现.尽管如此,tr 命令依然是 Linux 系统下处 ...

随机推荐

  1. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)

    ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配 ...

  2. MultipartFile 多文件上传的应用

    公司的项目很多地方要用到文件上传,以前的上传主要是用apache的fileupload ,使用的感受并不太好.今天试了试spring的MultipartFile,感觉还不错,封装的比较简洁. 当然,中 ...

  3. Hibernate学习(三)———— 一对多映射关系

    序言 前面两节讲了hibernate的两个配置文件和hello world!.还有hibernate的一级缓存和三种状态,基本上hibernate就懂一点了,从这章起开始一个很重要的知识点,hiber ...

  4. #16 os&sys模块

    前言 在编写Python程序的时候,可能需要和操作系统进行交互,比如获取某个目录下的内容.更改运行目录.更改环境变量等操作.在Python中有两个模块将这些问题完美解决,一起看看哇! 一.os模块 o ...

  5. 我对alias的重新认识:通过alias让rm更安全

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rm的悲剧总是发生在不经意之间,所以无论是在shell脚本中还 ...

  6. Java Generator

    以前我以为只有Python才会有generator,看来当时的我才年轻,后来认真研读<Thinking in Java>之后大有感悟,原来Java亦有generator,故做一次记录分享. ...

  7. loadrunner:Action.c(4): Error -27796: Failed to connect to server "192.168.66.3:8080": [10060] Connection timed out

    Action.c(4): Error -27796: Failed to connect to server "192.168.66.3:8080": [10060] Connec ...

  8. C# 分支语句 练习题(中间变量,随机数)

    练习一 请输入年份:”(1-9999),请输入月份:”(1-12),请输入日期(要判断大小月,判断闰年),判断输入的时间日期是否正确. 计算输入的时间是当前这一年的第几天. bool dateISOK ...

  9. SQLServer删除登录记录用户名和密码

    介绍: 作为一名开发人员都会知道我们做的项目都要用到数据库,数据库都需要账号和密码,然而问题来了,做的东西多了那些没用的账号和密码还在哪里纠缠着我们.所有我们不能忍了删除掉他. 网上很多都是2008的 ...

  10. java基础之XML

    目录 java基础之XML 1. XML解析概述 2. DOM4J介绍 2.1 常用包 2.2 内置元素 2.2 Element类 2.3 Attribute类 2.4 常用操作 3. 代码演示 3. ...