2.6 用 tr 进行转换

《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 进行转换)