tr命令

tr命令用于转换或删除文件中的字符,可以读文件也可以从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。

语法

tr [OPTION]... SET1 [SET2]

参数

  • -c, -C, --complement: 使用SET1的补码。

  • -d, --delete: 删除SET1中的字符,不翻译。

  • -s, --squeeze-repeats: 用一次出现的字符替换SET1中列出的重复字符的每个输入序列。

  • -t, --truncate-set1: 首先将SET1截断为SET2的长度。

  • --help: 输出帮助信息。

  • --version: 输出版本信息。

解释序列

  • \NNN: 八进制值为NNN的字符(13个八进制数字)。
  • \\: 反斜杠。
  • \a: 可闻的BEL
  • \b: 退格键。
  • \f: 换页。
  • \n: 新行。
  • \r: 返回。
  • \t: 水平制表符。
  • \v: 垂直制表符。
  • CHAR1-CHAR2: 从CHAR1CHAR2的所有字符按升序排列。
  • [CHAR*]: 在SET2中,复制CHAR直到SET1的长度。
  • [CHAR*REPEAT]: 重复CHAR的副本,如果以0开头,则重复八进制。
  • [:alnum:]: 所有字母和数字。
  • [:alpha:]: 所有字母。
  • [:blank:]: 所有水平空白。
  • [:cntrl:]: 所有控制字符。
  • [:digit:]: 所有数字。
  • [:graph:]: 所有可打印字符,不包括空格。
  • [:lower:]: 所有小写字母。
  • [:print:]: 所有可打印字符,包括空格。
  • [:punct:]: 所有标点符号。
  • [:space:]: 所有水平或垂直空白。
  • [:upper:]: 所有大写字母。
  • [:xdigit:]: 所有十六进制数字。
  • [=CHAR=]: 等同于CHAR的所有字符。

示例

file.txt文件内容如下。

Hello World

将文件中的字母全部转换为大写。

cat file.txt | tr [a-z] [A-Z]
# HELLO WORLD

同样可以使用[:lower][:upper]参数来实现。

cat file.txt | tr [:lower:] [:upper:]
# HELLO WORLD

将水平空白符转换为\t

cat file.txt | tr [:space:] "\t"
# Hello   World

删除所有o字符。

cat file.txt | tr -d "o"
# Hell Wrld

删除所有数字。

echo "My ID is 73535" | tr -d [:digit:]
# My ID is

取出字符串中的数字。

echo "My ID is 73535" | tr -cd [:digit:] # 73535

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://www.runoob.com/linux/linux-comm-tr.html https://www.tutorialspoint.com/unix_commands/tr.htm https://www.geeksforgeeks.org/tr-command-in-unix-linux-with-examples/