Linux中的Tr命令与示例

tr 是Linux和Unix系统中的命令行实用程序,可转换,删除和压缩标准输入中的字符,并将结果写入标准输出中。

tr 命令可以执行诸如删除重复的字符,将大写转换为小写以及替换和删除基本字符等操作。 通常,它通过管道与其他命令结合使用。

在本教程中,我们将向您展示如何使用 tr 通过实际示例和最常见选项的详细说明进行命令。

如何使用 tr 命令#

的语法 tr 命令如下:

tr OPTION... SET1 [SET2]

tr 接受通常具有相同长度的两组字符,并用第二组中的相应字符替换第一组中的字符。

一种 SET 基本上是一个字符串,包括特殊的反斜杠转义字符。

在以下示例中, tr 通过将第一组中的字符与第二组中的匹配字符进行映射,将替换标准输入(linuxize)中的所有字符。

echo 'linuxize' | tr 'lin' 'red'

每次发生 l 被替换为 riend

reduxeze

也可以使用字符范围来定义字符集。 例如,代替编写:

echo 'linuxize' | tr 'lmno' 'wxyz'

您可以使用:

echo 'linuxize' | tr 'l-n' 'w-z'

什么时候 -c--complement)选项, tr 替换不在SET1中的所有字符。

在下面的示例中,除“ li”以外的所有字符都将替换为第二组中的最后一个字符:

echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy

您可能已经注意到,上面的输出具有比输入多一个可见的字符。 这是因为 echo 命令显示不可见的换行符 n 也被替换为 y。 要回显不带换行的字符串,请使用 -n 选项。

-d--delete)选项告诉 tr 删除SET1中指定的字符。 删除字符而不进行压缩时,仅指定一组。

下面的命令将删除 liz 字符:

echo 'Linuxize' | tr -d 'liz'

L 由于输入包含大写字母,因此不会删除该字符 Ll SET中的字符为小写。

Lnuxe

-s--squeeze-repeats)选项将最后一次SET中的字符集替换为重复出现的序列。

在以下示例中, tr 删除重复的空格字符:

echo "GNU         Linux" | tr -s ' '
GNU  Linux

使用SET2时,将SET1中指定的字符序列替换为SET2。

echo "GNU         Linux" | tr -s ' ' '_'
GNU__Linux

-t--truncate-set1)选择权 tr 在执行进一步处理之前将SET1截断为SET2的长度。

默认情况下,如果SET1大于SET2 tr 将重用SET2的最后一个字符。 这是一个例子:

echo 'Linux ize' | tr 'abcde' '12'

输出显示该字符 e SET1中的字符与SET2的最新字符匹配,即 2

Linux iz2

现在,将相同的命令与 -t 选项:

echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize

您可以看到SET1的最后三个字符被删除。 SET1变为“ ab”,长度与SET2相同,并且不进行替换。

组合选项

tr 命令还允许您组合其选项。 例如,以下命令首先替换所有字符,但 i0 然后挤压重复 0 字符:

echo 'Linux ize' | tr -cs 'i' '0'
0i0i0

Tr命令示例

在本节中,我们将介绍一些常用的示例 tr 命令。

将小写转换为大写

将小写转换为大写或反向是该应用程序的典型用例之一 tr 命令。 [:lower:] 匹配所有小写字符,并且 [:upper:] 匹配所有大写字符。

echo 'Linuxize' | tr '[:lower:]' '[:upper:]'
LINUXIZE

除了字符类,您还可以使用范围:

echo 'Linuxize' | tr 'a-z' 'A-Z'

要将大写转换为小写,只需切换集合的位置即可。

删除所有非数字字符

以下命令删除所有非数字字符:

echo "my phone is 123-456-7890" | tr -cd [:digit:]

[:digit:] 代表所有数字字符,并使用 -c 选项,该命令将删除所有非数字字符。 输出将如下所示:

1234567890

将每个单词放在新行中

要将每个单词放在新行中,我们需要匹配所有非字母数字字符并将其替换为新行:

echo 'GNU is an operating system' | tr -cs '[:alnum:]' 'n'
GNU
is
an
operating
system

删除空白行

要删除空白行,只需挤压重复的换行符:

tr -s 'n' < file.txt > new_file.txt

在上面的命令中,我们使用重定向符号 < 传递内容 file.txttr 命令。 重定向 > 将命令的输出写入 new_file.txt

$PATH 环境变量是用冒号分隔的目录列表,它告诉外壳程序在键入命令时要搜索可执行文件的目录。

要在单独的行上打印每个目录,我们需要将冒号(:)并用新行替换:

echo $PATH | tr  ':' 'n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

结论#

tr 是用于翻译或删除字符的命令。

虽然非常有用, tr 只能使用单个字符。 对于更复杂的模式匹配和字符串操作,应使用 sed 要么 awk

如果您有任何疑问或反馈,请随时发表评论。

tr终端

Sidebar