热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

shell实现tr删除替换详解

这篇文章主要介绍了shell实现tr删除替换详解,需要的朋友可以参考下

tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。

语法:tr [–c/d/s/t] [SET1] [SET2]   #SET1: 字符集1;SET2:字符集2
            -c:complement,用SET2替换除SET1以外的字符。
            -d:delete,删除SET1中所有的字符,不转换。
            -s:squeeze-repeats,压缩SET1中重复的字符。
            -t:truncate-set1,将SET1用SET2转换,一般缺省为-t。

1、去除重复的字符

    #删除空白行就是删除换行符/n。
    #注意:这些空白行上只有回车符,没有空格符。

    $ cat test.txt  

         I love linux!

         Hello World!

        Shell is worthy to been studied.

   #这里用换行符的转义字符\n.
   #注意:此处用-s删除了多余的换行符,如果用-d,则会删除所有的换行符.

     $  cat test.txt | tr -s ["\n"]
         I love linux!
         Hello World!
         Shell is worthy to been studied.
   #也可以用八进制符\012,\012与\n都是换行符。
     $  cat test.txt | tr -s "[\012]"
         I love linux!
         Hello World!
         Shell is worthy to been studied.

2、大小写互换

# 将语句中所有的小写字母变成大写字母,其中-t可省略。
     $ echo "Hello World I Love You" |tr [-t] [a-z] [A-Z]
        HELLO WORLD I LOVE YOU
# 将语句中所有的大写字母变成小写字母。
    $ echo "Hello World I Love You" |tr [A-Z] [a-z]
       hello world i love you

# 也可以利用字符类进行转换。
# [:lower:]代表小写字母,[:upper:]代表大写字母。
    $ echo "Hello World I Love You" |tr [:lower:] [:upper:]
       HELLO WORLD I LOVE YOU

3、删除指定的字符

    $ cat test.txt
       Monday     09:00
       Tuesday    09:10
       Wednesday  10:11
       Thursday   11:30
       Friday     08:00
       Saturday   07:40
       Sunday     10:00
   # 现在要删除处理星期之外的所有字符。
   # -d代表删除,[0-9]代表所有的数字,[: ]代表冒号和空格。
      $  cat test.txt | tr -d "[0-9][: ]"
          Monday
          Tuesday
          Wednesday
          Thursday
          Friday
          Saturday
          Sunday

4、利用-c进行补集的替换

  # 有时候在文本中我们只知道要保留的一些字符,其他字符种类繁多,就可以使用补集的替换。

     $ cat test.txt
        Monday     09:00
        Tuesday    09:10
        Wednesday  10:11
        Thursday   11:30
        Friday     08:00
        Saturday   07:40
        Sunday     10:00

  # 我们只需要星期,则思路就是除了字母,其他统统替换掉。

  # 这里,-c:用换行符替换掉除了字母外的所有字符;-s:删除多余的换行符。

     $  cat test.txt|tr -cs  "[a-z][A-Z]" "\n"
         Monday
         Tuesday
         Wednesday
         Thursday
         Friday
         Saturday
         Sunday

总结:其中大小写字母的转换,删除不需要的字符比较常用。tr语法简单,易用。


推荐阅读
  • 您好:首先十分感谢您看以下文字:我在在网上下截了一个BCBX1,就像所有的人都知道一样,没有控件库,心中难免有点遗憾。可是昨天晚上睡下以后,在梦中用我那一台笨电脑上 ... [详细]
  • gitlab 汉化后502
    环境版本:GitLab社区版11.4.5,linuxcentos7.4gitlab汉化后,启动提示502错误,无法进入仓库 ... [详细]
  •     算算自己工作已经快一年了,不管中间有过什么挫折,但现在感觉自己有了很大的成长。想想曾经还畏惧过技术,觉得居然入了一个需要不断学习的行业,而自己连怎么学都还没搞清楚。但通过这 ... [详细]
  • Docker从安装到入门到项目部署
    容器化的时代你怎么可 ... [详细]
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • 无套路、无噱头,只送惊喜!
    2020年对于所有人来讲都是不平凡的一年,这一年,我们有沮丧、无奈、迷惘、还有着期待,有很多泪水挥洒在这一年。这一年,我们不 ... [详细]
  • linux json 写sql注入,sql注入之json注入(php代码)
    环境phpstudyphp服务端代码security数据库中的users表中的username,password字段用户名adminJSON服务端代码大家实际测试中注 ... [详细]
  • centos卸载不必要的程序_在 Linux 中移除从源代码安装的程序的一种简单的方法...
    不是所有的程序都可以在官方或者第三方库中找到,因此你不能使用常规的包管理来安装它们。有时你不得不从源代码中手动构建这些程序。就如你已经知道的一样,当你从 ... [详细]
  • centos7下安装docker(15.3跨主机网络-macvlan)
    除了ovrlay,docker还开发了另一个支持跨主机容器的driver:macvlanmacvlan本身是linukernel模块,其功能是允许在同一物理网卡上配置多了MAC地址,即:多 ... [详细]
  • TLB 缓存延迟刷新漏洞 CVE201818281 解析 ... [详细]
  • 102安装Linux系统
    安装Linux系统 安装CentOS系统准备系统光盘插入CentOS7光盘,引导安装程序设置主机,将光盘作为第一-引导设备从CentOS7光盘启动主机检测安装光盘的完整性从ISO镜 ... [详细]
  • docker整体了解
    Docker是一个基于LXC技术构建的容器引擎,基于Go语言开发,遵循Apache2.0协议开源Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移 ... [详细]
  • hadoop完全分布式搭建
    原文链接:hadoop完全分布式搭建主机分配以及地址要求:角色主机名IP地址Namenodemaster192.168.222.201Datanodeslave ... [详细]
  • python有什么应用领域[python常见问题]
    python语言可以用来开发游戏,用于大数据的挖掘和处理,开发web,应用在系统运维,云计算,金融理财分析,人工智能等涉及 ... [详细]
  • Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,现在在企业中的使用率也是很广的。git是一个分布式的版本控制系统,不像以前的svn,svn是 ... [详细]
author-avatar
詹詹洋zy_431
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有