tr命令笔记

        tr 是Unix命令行专家工具箱中的一件万能工具。它可用于编写优雅的单行命令。 tr 可以对
来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。 tr 是translate(转换)的简写,
因为它可以将一组字符转换成另一组字符。
        tr 只能通过 stdin (标准输入)接收输入(无法通过命令行参数接收)。其调用格式如下: 

tr [options] set1 set2 


        来自 stdin 的输入字符会按照位置从 set1 映射到 set2 ( set1 中的第一个字符映射到 set2
中的第一个字符,以此类推),然后将输出写入 stdout (标准输出)。 set1 和 set2 是字符类或 
字符组。如果两个字符组的长度不相等,那么 set2 会不断复制其最后一个字符,直到长度与 set1
相同。如果 set2 的长度大于 set1 ,那么在 set2 中超出 set1 长度的那部分字符则全部被忽略。 

实例 

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

可以使用下面的命令: 

echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'




         'A-Z' 和 'a-z' 都是字符组。我们可以按照需要追加字符或字符类来构造自己的字符组。 
'ABD-}' 、 'aA.,' 、 'a-ce-x' 以及 'a-c0-9' 等均是合法的集合。定义集合也很简单,不
需要书写一长串连续的字符序列,只需要使用“起始字符-终止字符”这种格式就行了。这种写
法也可以和其他字符或字符类结合使用。如果“起始字符-终止字符”不是有效的连续字符序列,
那么它就会被视为含有3个元素的集合(起始字符、-和终止字符)。你也可以使用像 '\t' 、 '\n'
这种特殊字符或其他ASCII字符。 

  •  加解密

        在 tr 中利用集合的概念,可以轻松地将字符从一个集合映射到另一个集合中。

       下面是一个用 tr 进行数字加密和解密的简单例子,首先是加密: 

echo 12345 | tr '0-9' '9876543210'

得到加密的结果是:87654

接下来解密: 

echo 87654 | tr '9876543210' '0-9'

 得到结果是:12345

        tr 命令可以用来加密。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. 


对加密后的密文再次使用同样的ROT13函数,我们可以采用: 

echo ge pnzr, ge fnj, ge pbadhrerq. | tr 'a-zA-Z' 'n-za-mN-ZA-M'

  输出如下: 
tr came, tr saw, tr conquered. 


tr 还可以将制表符转换成单个空格: 

tr '\t' ' ' < file.txt 



用tr删除字符 


        tr 有一个选项 -d ,可以通过指定需要被删除的字符集合,将出现在 stdin 中的特定字符清
除掉: 

cat file.txt | tr -d  '[set1]' 
echo "Hello 123 world 456" | tr -d '0-9'

上面命令得到的结果是:
Hello world 


字符组补集 


        可以利用选项 -c 来使用 set1 的补集。下面的命令中, set2 是可选的: 

tr -c [set1] [set2]

 
        如果只给出了 set1 ,那么 tr 会删除所有不在 set1 中的字符。如果也给出了 set2 , tr 会将不
在 set1 中的字符转换成 set2 中的字符。如果使用了 -c 选项, set1 和 set2 必须都给出。如果 -c
与 -d 选项同时出现,你只能使用 set1 ,其他所有的字符都会被删除。 


下面的例子会从输入文本中删除不在补集中的所有字符:

echo hello 1 char 2 next 4 | tr -d -c '0-9 \n' 

得到结果:
1 2 4 

下面命令实例将不在 set1 中的字符替换成空格: 

echo hello 1 char 2 next 4 | tr -c '0-9' ' ' 


用tr压缩字符 串


tr 命令能够完成很多文本处理任务。例如,它可以删除字符串中重复出现的字符。基本实现
形式如下: 
 

tr -s '[需要被压缩的一组字符]' 


 
如果你习惯在点号后面放置两个空格,你需要在不删除重复字母的情况下去掉多余的空格: 

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

  • tr 命令还可以用来删除多余的换行符: 
cat multi_blanks.txt | tr -s '\n'


字符类 


        tr 可以将不同的字符类作为集合使用,所支持的字符类如下所示。 

  • alnum :字母和数字。 
  • alpha :字母。 
  • cntrl :控制(非打印)字符。 
  • digit :数字。 
  • graph :图形字符。 
  • lower :小写字母。 
  • print :可打印字符。 
  • punct :标点符号。 
  • space :空白字符。 
  • upper :大写字母。 
  • xdigit :十六进制字符。 

可以按照下面的方式选择所需的字符类: 

tr [:class:] [:class:] 


例如: 
 

tr '[:lower:]' '[:upper:]' 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部