zoukankan      html  css  js  c++  java
  • 转换和删除重复命令tr

    前几篇文章介绍了几个用于处理字符的命令和工具,然而在处理大小写转换、删除重复字符等任务时,这些命令处理起来相对较为麻烦。这里将简单介绍Linux下自带的tr命令,相对于其他命令而言,其语法较为简单,比较方便记忆。

    一、tr命令的基本格式

    tr命令用于处理字符转换、删除重复字符等任务。

    • 命令格式:

    tr [option] [string1] [string2]

    在tr的基本命令格式中,string1用于查询字符串,string2用于转换查询到的字符串。tr命令不能读取文件,如果要转换文件中的内容,可以使用重定向输入或管道的方法。

    • 常用选项:

    c:使用string1字符集中的补集替换,要求的字符集为ASCII。

    d:删除string1中包含的所有字符。

    s:将所有重复出现的字符进行压缩,只保留一个字符,即删除重复的字符。

    在使用tr命令时,还需要指定string1和string2这两个格式化字符串,字符串的形式可以是字符的范围、单个字符、多字符列表等。常见的字符串形式及其含义如下:

    [a-z]:小写字母a-z范围内的字符及其组合而成的字符串。

    [A-Z]:大写字母A-Z范围内的字符及其组合而成的字符串。

    [0-9]:数字0-9范围内的字符及其组合。

    [C*n]:这个表达式中,C表示字符或字符组合,n表示重复出现的次数。即字符或字符组合出现n次的字符串。

    除了以上这些常见的字符串形式以外,tr命令还支持在字符串中查询和处理一些特殊的字符,这些字符通常都使用一个八进制数字表示。常见的特殊字符及其对应的八进制表示形式如下:

    12:新的一行,在其他命令中经常使用 表示。

    11:相当于一个Tab键,有些命令使用 表示。

    15:Enter键(即换行符),在其他命令中经常使用 表示。

    14:新的一页,在其他命令中经常使用f表示。

    二、字符转换

    使用命令时,最常见的任务是对一个字符串执行转换。

    (1)最常见的字符串转换是大小写的转换。例如需要将一个字符串中的字符全部转换为大写:

    [root@localhost test]# echo "this is a test string." | tr -s "[a-z]" "[A-Z]"
    THIS IS A TEST STRING.

    (2)由于tr命令不能直接从文本中读取并转换文本,因此通常都使用重定向输入或管道传递的方法。例如需要将文本文件test中的字符执行大小写转换:

    [root@localhost test]# cat test
    this is the first line.
    this is the second line.
    [root@localhost test]# tr -s "[a-z]" "[A-Z]" <test
    THIS IS THE FIRST LINE.
    THIS IS THE SECOND LINE.
    [root@localhost test]# cat test
    this is the first line.
    this is the second line.

    原文件test中的文本并没有改变。

    (3)除了可以使用[a-z]、[A-Z]这样的形式外,还可以使用一个列表的形式。例如需要将test中的小写字母tfls转换成大写字母:

    [root@localhost test]# tr -s "tfls" "TFLS" <test
    ThiS iS The FirST Line.
    ThiS iS The Second Line.

    注意:列表中的字符是一一对应的(t-T、f-F、l-L、s-S),另外需要注意此处列表与正则表达式中的列表的区别。

    (4)除此之外,tr命令还可以对文本进行格式转换,例如:

    [root@localhost test]# cat test1
    2821020225#Liulu#0#A#B#0
    2821020115#Liumi#B#C#0#0
    2721020321#Xuli#0#D#A#0
    2921020632#Xiayu#A#C#0#0
    2721010409#Liwei#B#C#0#D
    2921050313#Heli#B#0#D#0
    2721030227#Wangtao#C#0#D#0
    [root@localhost test]# tr -s "#" "	" <test1
    2821020225      Liulu   0       A       B       0
    2821020115      Liumi   B       C       0       0
    2721020321      Xuli    0       D       A       0
    2921020632      Xiayu   A       C       0       0
    2721010409      Liwei   B       C       0       D
    2921050313      Heli    B       0       D       0
    2721030227      Wangtao C       0       D       0

    三、删除字符

    tr命令的另一个重要功能是用来删除字符,包括删除重复字符和自定义的字符集等。

    (1)使用tr命令删除重复字符时,需要指定字符串或文本中可能存在重复的字符集合,因此仅需要使用string1即可。例如:

    [root@localhost test]# echo "HHHHeeeelloo" | tr -s "Heo"
    Hello

    (2)还可以使用一个巨大的字符集删除可能存在的重复字符。例如要删除所有字母的重复:

    [root@localhost test]# echo "HHHHeeeellooo" | tr -s "[a-z][A-Z]"
    Helo

    (3)也可以删除文本中的一些特殊字符,例如删除文本文件中多余的空行:

    [root@localhost test]# cat test2
    a
    
    
    b
    
    
    c
    [root@localhost test]# tr -s "
    " <test2
    a
    b
    c

    (4)也可使用八进制数表示特殊字符。删除多余空行的命令也可以写成:

    [root@localhost test]# tr -s "12" <test2
    a
    b
    c

    (5)tr命令还可以用来删除特定的字符集:

    [root@localhost test]# echo "My name is Jhon." | tr -d "msn"
    My ae i Jho.

    注意:tr命令在处理替换和删除时,采用逐字符查询处理的方法。

  • 相关阅读:
    沙龙:超越敏捷 召集中![广州]
    超级扫盲什么是设计模式?
    大话UML
    敏捷开发纵横谈
    超越竞争对手的秘密武器技术重用
    1.1 基础知识——CMMI是什么东西?
    Tutorial 2: Rendering a Triangle
    Tutorial 4: 3D Spaces
    Tutorial 5: 3D Transformation
    D3D11中的绘制
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3463954.html
Copyright © 2011-2022 走看看