Linux 中的 Tr 命令举例说明

Linux 的真正强大之处在于创建了许多程序/实用程序来使我们的生活变得轻松。 当您在您的环境中编写大量 shell 脚本时,这组程序会派上用场,您将在其中使用这些程序来操作脚本中的输入或输出。 一种这样的实用程序是 tr代表 翻译. 顾名思义,tr 命令用于翻译、压缩和删除标准输入中的字符,在 Linux 和类 Unix 操作系统中写入标准输出。

在本文中,我们将通过实际示例来学习 tr 命令的用法。 在本指南的最后,您将熟悉使用 tr 命令,并且您将了解在哪种情况下使用此命令会有所帮助。

tr 命令语法和帮助

要了解 tr 命令支持的语法和参数列表,请参阅手册页或使用 --help 标志与 tr 命令。

$ man tr
$ tr --help

tr 命令接受以下形式的两个参数 SET1SET2 在哪里 SET1 将是输入字符,这些字符将由字符翻译 SET2. 当某些标志传递给 tr 命令时,可以选择使用 SET2。

tr [OPTION]… SET1 [SET2]

示例 1 – 使用 tr 命令进行翻译

下面是一个简单的 example 关于如何使用 tr 命令。 这 tr 命令通过管道传输 echo 命令和小写 “ost” 被转换为大写 “原声”.

这里的转换将根据两组字符的位置进行。 SET1 中的第一个字符将被 SET2 中的第一个字符替换 (o->o),同样适用于所有字符 (s->s,t->T)。

$ echo "ostechnix" | tr "ost" "OST"
OSTechnix
使用 tr 命令将小写转换为大写

示例 2 – 字符集和特殊字符

tr 命令提供了字符集的使用,这使得转换非常容易。 这 tr 命令还可以解释特殊字符,例如 (n,t,v) 可以用不同的字符翻译。

字符集

让我们看看如何使用字符集。 在下面 example,我有字符串、整数和标点符号。 标点符号替换为点 (.) 使用 "[:punct:]" 字符集。

$ echo "Ubuntu 20.04 #$%^" | tr "[:punct:]" "."
使用字符集进行翻译使用字符集进行翻译

示例 3 – 案例转换

使用字符串时,您可能希望将字符串的大小写从小写更改为大写,反之亦然。 使用 tr 命令,您可以通过不同的方式进行大小写转换。

在第一种方式中,您可以键入 一种z 在第 1 组和第 2 组中。

$ echo "ostechnix" | tr "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
OSTECHNIX
大写转换大写转换

请注意,这不是首选方式。

除了键入所有字符,您还可以使用范围(即 阿兹, AZ)。

$ echo "ostechnix" | tr "a-z" "A-Z" # Lower to Upper case
OSTECHNIX
$ echo "OSTECHNIX" | tr "A-Z" "a-z" # Upper to Lower case
ostechnix
使用范围的小写和大写转换使用范围的小写和大写转换

也可以使用字符类来代替上述两种方法。

$ echo "OSTECHNIX" | tr "[:upper:]" "[:lower:]"
ostechnix
$ echo "ostechnix" | tr "[:lower:]" "[:upper:]"
OSTECHNIX
使用字符集进行转换使用字符集进行转换

示例 4 – 删除字符

有一组可选参数 tr 支持执行各种动作。

一个这样的标志是“-d 或者 --delete” 这将删除 SET1 中给出的字符。

下面是输入,其中我有三个 IP,每行有空格,第三行有制表符 (2)。 现在使用 -d 标志你可以清理空白。

  192.168. 1. 12   
  192.168. 1. 13  
        192.168. 1. 14 

运行以下命令将删除所有空格。 这里要注意的重要一点是标签不会被删除,而只会删除空格。

$ tr -d " " < tr_test.txt
删除空格删除空格

如果您希望同时删除空格和制表符(水平空格),您可以使用 "[:blank:]" 字符集。

$ tr -d "[:blank:]" < tr_test.txt
删除空格和制表符删除空格和制表符

您还可以使用 "[:space:]" 用于删除水平和垂直空格的字符集。

$ tr -d "[:space:]" < tr_test.txt
删除水平和垂直空间删除水平和垂直空间

示例 5 – 挤压重复

当国旗“-s 或者 --squeeze-repeats” 使用时,SET1 中给出的重复字符将被替换为单个出现的字符。在下面 example你可以看到我使用了 4 等于 (=) 符号。 现在 -s 将替换 4 (=) 与 1 (=)。

$ echo "Production IP ==== 192.168.1.10" | tr -s "="
Production IP = 192.168.1.10
挤压字符挤压字符

下面是另一个 example 其中换行符(n) 被挤压。

$ cat tr_test.txt | tr -s "n"
挤压换行符挤压换行符

示例 6 – 补码

当。。。的时候 -c 使用标志,它将对给定的集合进行反向转换。 在下面 example tr 会将所有字母翻译成 "*" 一般。 但当 -c 使用时,操作将被反转。 除字母以外的所有其他字符都将替换为 "*".

$ echo "Employee Number is 1267890" | tr -c "[:alpha:]" "*"

您可以将其与其他标志结合使用以获得某些结果。 为了 example 当你结合 -d 标志,它将执行反向删除操作。

$ echo "Employee Number is 1267890" | tr -cd "[:digit:]"
补充标志补充标志

笔记: 从以上 example,您可以看到换行符也被翻译/删除。 使用此方法时,请记下这一点并继续。

示例 7 – 重定向输出

在前面的所有部分中,我们从文件中读取输入并使用 tr 命令并将输出发送到终端。 如果您希望将输出重定向到文件而不是终端,请使用重定向运算符。

$ tr -s "n" < tr_test.txt > new_tr_test.txt

$ cat new_tr_test.txt

将输出重定向到文件将输出重定向到文件

相关阅读:

  • 用示例解释 Bash 重定向

结论

在本文中,我向您介绍了如何使用 tr 命令。 在 Linux 中,总是有多种方法可以实现相同的目标。 我们在本文中展示的任何内容也可以通过其他程序实现,例如 sed, awk等。但是了解这些命令和不同的方式将帮助您确定正确的情况以使用正确的命令/程序。