什么是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. php获取当前是星期几

    <?php $weekarray=array("日","一","二","三","四",&quo ...

  2. Jmeter - 测试 http 接口

    前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对 ...

  3. Scala函数与函数式编程

    函数是scala的重要组成部分, 本文将探讨scala中函数的应用. scala作为支持函数式编程的语言, scala可以将函数作为对象即所谓"函数是一等公民". 函数定义 sca ...

  4. varnish实践

    一.实验环境: 1.软件版本: 系统版本:CentOS Linux release 7.4.1708 (Core) php版本:PHP 7.2 nginx版本:nginx-1.12.2 数据库版本:M ...

  5. 查找第K小的数 BFPRT算法

    出处 http://blog.csdn.net/adong76/article/details/10071297 BFPRT算法是解决从n个数中选择第k大或第k小的数这个经典问题的著名算法,但很多人并 ...

  6. C++ 重载运算符简单举例

    我们可以重定义或重载大部分 C++ 内置的运算符.这样,就能使用自定义类型的运算符. 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的.与其他函数一 ...

  7. Visual Studio Ultimate 2013

    简体中文版 SHA-1: 07313542D36ED8BEEF18520AA4F15E33E32C7F77 http://download.microsoft.com/download/0/7/5/0 ...

  8. WebForm 【上传图片--添加水印】

      对图片添加水印,上传 <div> <asp:FileUpload ID="FileUpload1" runat="server" /> ...

  9. 在使用vue-cli中遇到的几个问题

    前言:框架没有好坏之分,能解决需求就可以.之前没事用vue模仿过BOSS直聘App(纯属娱乐),实际工作中开发过一个后台管理系统,遇到过不少坑,终于闲下来稍微总结几个问题分享一下! 一.所遇到的问题( ...

  10. socket、web socket

    WEB SOCKET: 说明:为浏览器提供双工异步通信,浏览器可以向服务端发送消息.服务端也可以向浏览器发送消息. SOCKET: 说明:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接 ...