美文网首页
2.6 用 tr 进行转换

2.6 用 tr 进行转换

作者: 拙言_Coder | 来源:发表于2019-03-09 13:09 被阅读8次

    《Linux Shell 脚本攻略(第 2 版)》读书笔记

    • tr 可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。
    • tr 只能通过 stdin 而无法通过命令行参数来接受输入。

    将输入字符由大写转换成小写

    $ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
    hello who is this
    

    'A-Z' 和 'a-z' 都是集合。定义集合:

    1. 定义连续集合的格式:“起始字符-终止字符”。这种写法也可以和其它字符或字符类结合使用。
    2. 如果“起始字符-终止字符”不是一个连续的字符序列,那么它就会被视为包含了 3 个元素的集合:起始字符、-、终止字符。

    用 tr 进行加密和解密

    用 tr 进行数字加密和解密

    $ echo 12345 | tr '0-9' '9876543210'
    87654 # 已加密
    
    $ echo 87654 | tr '9876543210' '0-9'
    12345 # 已解密
    

    ROT13 加密算法

    在 ROT13 算法中,文本加密和解密都使用同一个函数。ROT13 按照字母表排列顺序执行 13 个字母的转换。

    # 加密
    $ echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
    ge pnzr, ge fnj, ge pbadhrerq.
    
    # 解密
    $ echo "ge pnzr, ge fnj, ge pbadhrerq." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
    tr came, tr saw, tr conquered.  
    

    用 tr 删除字符

    # 将stdin中的数字删除并打印出来
    $ echo "Hello 123 world 456" | tr -d '0-9'
    Hello  world
    

    字符集补集

    # 从输入文本中将不在补集中的所有字符全部删除
    $ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
    1  2  4
    

    在这里,补集中包含了除数字、空格字符和换行符之外的所有字符。因为指定了-d,所以这些字符全部都被删除。

    用 tr 压缩字符

    压缩空白字符

    $ echo "GNU is       not     UNIX. Recursive   right ?" | tr -s ' '
    GNU is not UNIX. Recursive right ?
    

    将文件中的数字列表进行相加

    $ cat sum.txt
    1
    2
    3
    4
    5
    
    $ cat sum.txt | echo $[ $(tr '\n' '+') 0 ]
    15
    

    摈除多余的换行符

    $ cat multi_blanks.txt | tr -s '\n'
    line1
    line2
    line3
    line4
    

    字符类

    tr 可以像使用集合一样使用各种不同的字符类。

    • alnum:字母和数字
    • alpha:字母
    • blank:水平空白区
    • cntrl:控制(非打印)字符
    • digit:数字
    • graph:图形字符
    • lower:小写字母
    • print:可打印字符
    • punct:标点符号
    • space:空白字符
    • upper:大写字母
    • xdigit:十六进制字符
    $ echo "HELLO WHO IS THIS" | tr '[:upper:]' '[:lower:]'
    hello who is this
    

    相关文章

      网友评论

          本文标题:2.6 用 tr 进行转换

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