原文:http://blog.csdn.net/sunnyyoona/article/details/52986893
1. 用途

tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。

2. 语法
  1. tr [OPTION]... SET1 [SET2]
3. 参数
3.1 -s 压缩重复字符

-s: squeeze-repeats,用SET1指定的字符来替换对应的重复字符 (replace each input sequence of  a  repeated  character  that  is listed in SET1 with a single occurrence of that character)

  1. xiaosi@Qunar:~/test$ echo "aaabbbaacccfddd" | tr -s [abcdf] // abacfd

可以使用这一特点,删除文件中的空白行,实质上跟上面一样,都是用SET1指定的字符来替换对应的重复字符

  1. xiaosi@Qunar:~/test$ cat b.txt
  2. I like football
  3. Football is very fun!
  4. Hello
  5. xiaosi@Qunar:~/test$ cat b.txt | tr -s ["\n"]
  6. I like football
  7. Football is very fun!
  8. Hello
3.2 -d 删除字符

-d:delete,删除SET1中指定的所有字符,不转换(delete characters in SET1, do not translate)

  1. xiaosi@Qunar:~/test$ echo "a12HJ13fdaADff" | tr -d "[a-z][A-Z]"
  2. 1213
  3. xiaosi@Qunar:~/test$ echo "a1213fdasf" | tr -d [adfs]
  4. 1213
3.3 字符替换

-t:truncate,将SET1中字符用SET2对应位置的字符进行替换,一般缺省为-t

  1. xiaosi@Qunar:~/test$ echo "a1213fdasf" | tr -t [afd] [AFO] // A1213FOAsF

上述代码将a转换为A,f转换为F,d转换为O。

可以利用这一特点,实现大小字母的转换

  1. xiaosi@Qunar:~/test$ echo "Hello World I Love You" |tr -t [a-z] [A-Z]
  2. HELLO WORLD I LOVE YOU
  3. xiaosi@Qunar:~/test$ echo "HELLO WORLD I LOVE YOU" |tr -t [A-Z] [a-z]
  4. hello world i love you

也可以利用字符集合进行转换

  1. xiaosi@Qunar:~/test$ echo "Hello World I Love You" |tr -t [:lower:] [:upper:]
  2. HELLO WORLD I LOVE YOU
  3. xiaosi@Qunar:~/test$ echo "HELLO WORLD I LOVE YOU" |tr -t [:upper:] [:lower:]
  4. hello world i love you

备注:

字符集合如下

  1. \NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
  2. \\ 反斜杠
  3. \a Ctrl-G 铃声
  4. \b Ctrl-H 退格符
  5. \f Ctrl-L 走行换页
  6. \n Ctrl-J 新行
  7. \r Ctrl-M 回车
  8. \t Ctrl-I tab键
  9. \v Ctrl-X 水平制表符
  10. CHAR1-CHAR2 从CHAR1 到 CHAR2的所有字符按照ASCII字符的顺序
  11. [CHAR*] in SET2, copies of CHAR until length of SET1
  12. [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0
  13. [:alnum:] 所有的字母和数字
  14. [:alpha:] 所有字母
  15. [:blank:] 水平制表符,空白等
  16. [:cntrl:] 所有控制字符
  17. [:digit:] 所有的数字
  18. [:graph:] 所有可打印字符,不包括空格
  19. [:lower:] 所有的小写字符
  20. [:print:] 所有可打印字符,包括空格
  21. [:punct:] 所有的标点字符
  22. [:space:] 所有的横向或纵向的空白
  23. [:upper:] 所有大写字母
3.4 字符补集替换

-c:complement,用SET2替换SET1中没有包含的字符

  1. xiaosi@Qunar:~/test$ cat a.txt
  2. Monday 09:00
  3. Tuesday 09:10
  4. Wednesday 10:11
  5. Thursday 11:30
  6. Friday 08:00
  7. Saturday 07:40
  8. Sunday 10:00
  9. xiaosi@Qunar:~/test$ cat a.txt | tr -c "[a-z][A-Z]" "#" | tr -s "#" | tr -t "#" "\n"
  10. Monday
  11. Tuesday
  12. Wednesday
  13. Thursday
  14. Friday
  15. Saturday
  16. Sunday

上面代码中 tr -c "[a-z][A-Z]" "#" 表示将除大小字母以外的所有的字符都替换为#。

上面代码可优化为:

    1. xiaosi@Qunar:~/test$ cat a.txt | tr -cs "[a-z][A-Z]" "\n"
    2. Monday
    3. Tuesday
    4. Wednesday
    5. Thursday
    6. Friday
    7. Saturday
    8. Sunday

(转)[Shell]tr命令详解的更多相关文章

  1. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

  2. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  3. Linux shell sed 命令详解

    详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761 sed命令常见用途 查找关键词做全局替换 查找某行的关键词做替换 查找关键字所在 ...

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

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

  5. linux tr命令详解

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

  6. tr命令详解

    基础命令学习目录 原文链接:https://www.cnblogs.com/ginvip/p/6354440.html 什么是tr命令?tr,translate的简写,translate的翻译: [t ...

  7. Linux:tr命令详解

    tr tr命令可以对来自标准输入的字符进行替换.压缩和删除 语法 tr(选项)(SET1 SET2) 选项 -c或——complerment:取代所有不属于第一字符集的字符: -d或——delete: ...

  8. [转]linux tr命令详解

    转自:http://www.cnblogs.com/huangxingkezhan/archive/2013/01/23/2874031.html 通过使用 tr,您可以非常容易地实现 sed 的许多 ...

  9. MAC shell ps 命令详解(转)

    ps命令为我们提供了一次性的查看进程结果,它所提供的查看结果不是动态连续的:如果想对进程时间监控,应该用top工具 Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当 ...

随机推荐

  1. SNMP协议学习笔记

    什么是SNMP协议? SNMP协议是以UDP为基础的应用层协议,全称为 简单网络管理协议,用于网络管理系统与被管设备(路由器,交换机,服务器等设备)进行通信. 应用场景 随着网络设备的增多,需要单独的 ...

  2. DELPHI XE5 跨平台 Form ShowModal 官方示例

    Calling ShowModal as an Anonymous Method on All Platforms procedure THeaderFooterForm.btnPickClick(S ...

  3. Javascript脚本 :Function 对象的定义和使用

    javascript  Function 对象的定义 创建函数的语法:var myFunction=new Function(arg1,arg2,...agrN,body);agrN 为函数的参数,b ...

  4. quartz 使用配置文件配置线程数

    quartz默认的线程数是10个,如果我们要修改这个线程数需要做一个配置文件,在配置文件内修改线程. 一共需要2个操作: 1.找到quartz的XML配置文件,设置加载配置文件(配置文件存放在weba ...

  5. IOException while loading persisted sessions: java.io.EOFException

    运行eclipse启动服务器的时候,出现了IOException while loading persisted sessions: java.io.EOFException报错.本以为是代码修改出现 ...

  6. [.net 多线程]ThreadPool的安全机制

    ThreadPool类,有两个方法我们没有用到,UnsafeQueueUserWorkItem 和UnsafeRegisterWaitForSingleObject. 为了完全理解这些方法,首先,我们 ...

  7. 【连载】redis库存操作,分布式锁的四种实现方式[二]--基于Redisson实现分布式锁

    一.redisson介绍 redisson实现了分布式和可扩展的java数据结构,支持的数据结构有:List, Set, Map, Queue, SortedSet, ConcureentMap, L ...

  8. Android手机中怎么样在没root的情况下 修改 hosts 文件

    工具  链接:https://pan.baidu.com/s/1AENluDCQ-2qYDPcE5K6l8g 密码:t7eu  http://bbs.360.cn/forum.php?mod=view ...

  9. PLSQL导出语句的查询结果

    不需要把全部结果都展示出来

  10. Navicat 远程连接 MySQL

    Navicat 远程连接 MySQL 相信大家都有在远程服务器上进行开发吧,其中 MySQL 的使用率应该也会挺高,如果使用 Navicat 等可视化工具来操作远程数据库不失为一种很好的选择,避免了在 ...