Linux命令学习手册-tr

作者: QuietHeart | 来源:发表于2020-02-19 13:39 被阅读0次
    tr [OPTION]... SET1 [SET2]
    

    功能

    转换或者删除字符。

    描述

    tr 指令从标准输入设备读取数据,经过字符串转译后,输出到标准输出设备。

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

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

    参数:

    • -c--complerment 取代所有不属于第一字符集的字符。
    • -d--delete 删除所有属于第一字符集的字符。
    • -s--squeeze-repeats 把连续重复的字符以单独一个字符表示。
    • -t--truncate-set1 这个比较难理解, man 上面的解释是: first truncate SET1 to length of SET2,经过我的实践发现,将 set1 的字符依次替换成 set2 中的字符,如果 set1 中的字符数目超过 set2 ,那么 set1 多出的字符忽略。如果没有 -t ,那么多出的字符都替换成 set2 的最后一个字符。
    • --help 在线帮助。
    • --version 显示版本信息。

    字符范围

    指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。

    • [a-z] a-z 内的字符组成的字符串。

    • [A-Z] A-Z 内的字符组成的字符串。

    • [0-9] 数字串。

    • \octal 一个三位的八进制数,对应有效的ASCII字符。

    • [O*n] 表示字符O重复出现指定次数n。因此 [O*2] 匹配 OO 的字符串。

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

    速记符含义八进制方式

    • \a Ctrl-G 铃声\007
    • \b Ctrl-H 退格符\010
    • \f Ctrl-L 走行换页\014
    • \n Ctrl-J 新行\012
    • \r Ctrl-M 回车\015
    • \t Ctrl-I tab键\011
    • \v Ctrl-X \030

    举例

    压缩文件test内容中重复的字符为一个

    $tr -s [a-z]
    

    这样,会把文件中每一行的, Set1([a-z]) 字符串中的重复字符压缩为一个,并把处理的结果打印到标准输出,原来的文件不变。

    注意这里, set1 集合(也就是第一个参数 [a-z] )中指定的是字符集合,而不是字符串,所以这里做的是把单个字符的重复给压缩为一个,而不是字符串重复。

    例如 test 有一行是 tttt.tgz ,那么会变成 t.tgz ,但是 hellohellohello 会变成 helohelohelo.

    去掉文件中多余的空行

    $tr -s "[\012]" < test
    

    $tr -s ["\n"]
    

    这里,假设原来文件 test 的内容是:

    111 
    222 
    
    333 
    
    
    444
    

    运行之后,标准输出:

    111 
    222 
    333 
    444
    

    而原来文件的内容不会改变。

    删除文件中的 ^M ,并代之以换行

    $tr -s "[\015]" "[\n]"
    

    $tr -s "[\r]" "[\n]
    

    一般来说, windows 上面编辑的文件拿到 linux 上面来没行的结尾可以会有这样的符号,实际上直接 cat 也看不出 ^M 符号。

    替换文件 test 中所有冒号,代之以逗号

    $tr -s "[:]" "[,]"
    

    $tr -s ":" ","
    

    显示 $PATH 变量将 : 变成回车

    $echo $PATH | tr ":" "\n"
    

    这里,用 echo $PATH 或者 echo $LD_LIBRARY_PATH 等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr 命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了.

    以上命令在 vi 中进行处理

    1,$!tr -s ":" ","
    

    这样,会直接修改 vi 编辑的文件,可以在 vi 内使用所有这些命令!

    只要记住:在 tr 命令前要加上您希望处理的行范围和感叹号 ( ),如

    1,$!tr -d '\t'
    

    这里,美元符号表示最后一行。

    替换第一个参数字符集之外的字符为指定字符

    tr -c [boy] "k"
    

    输入之后,输出如下:

    kkkkokboykkookk
    

    这里,会把属于第一个参数的字符集中的字符之外的所有,都替换成第二个参数对应的字符。第二个参数必须是单个字符,如果是多个字符,则取最后一个,例如 ka 等价于 a .

    使用 cat trTest 查看文件的内容如下:

    hello 
    boy 
    good
    

    删除 set1 字符集指定的字符

    $tr -d bld
    

    $tr -d [bld]
    

    输入之后,输出如下:

    heo 
    oy 
    goo
    

    这样,会删除 trTest 文件中的所有 bld 三个字符。这里使用 cat 查看 trTest 文件内容如下:

    $cat trTest 
    hello 
    boy 
    good
    

    把文件中的小写字符转换成大写的

    $tr a-z A-Z
    

    $tr [a-z] [A-z]
    

    输入之后,输出如下:

    111 
    222 
    HELLO
    

    这里, testTr 内容如下:

    111 
    222 
    hello
    

    使用 -t 替换字符, set1 超出 set2 的部分忽略

    $tr -t hld boy < trTest
    

    输入之后,输出如下:

    beooo 
    boy 
    gooy
    

    这样,会依次把 h , l , d 替换成 b , o , y 如果是 hldg 那么多出来的字符 g 忽略,如果没有 -t 那么多出来的所有字符被替换成 boy 的最后一个字符 y

    这里 trTest 文件的内容:

    $cat trTest 
    hello 
    boy 
    good

    相关文章

      网友评论

        本文标题:Linux命令学习手册-tr

        本文链接:https://www.haomeiwen.com/subject/bsyyxhtx.html