Linux中的Tr命令与示例

时间:2020-03-05 15:28:43  来源:igfitidea点击:

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

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

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

如何使用“ tr”命令

'tr'命令的语法如下:

tr OPTION... SET1 [SET2]

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

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

在下面的示例中,“ tr”将通过映射第一组中的字符与第二组中的匹配字符来替换标准输入(公路)中的所有字符。

echo 'theitroad' | tr 'lin' 'red'

每次出现的'l'被'r'替换,'i'被'e'替换,'n'被'd'替换:

reduxeze

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

echo 'theitroad' | tr 'lmno' 'wxyz'

我们可以使用:

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

当使用'-c'('--complement')选项时,'tr'将替换SET1中没有的所有字符。

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

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

我们可能已经注意到,上面的输出具有比输入多一个可见的字符。
这是因为'echo'命令显示了一个不可见的换行符'\ n',该字符也被替换为'y'。

要回显不带换行的字符串,请使用'-n'选项。

'-d'('--delete')选项告诉'tr'删除SET1中指定的字符。
在不压缩字符的情况下,仅指定一组字符。

以下命令将删除“ l”,“ i”和“ z”字符:

echo 'theitroad' | tr -d 'liz'

不会删除“ L”字符,因为输入包含大写字母“ L”,而SET中的“ l”字符是小写字母。

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'

输出显示SET1中的字符'e'与SET2的最新字符'2'匹配:

Linux iz2

现在,将相同的命令与'-t'方法一起使用:

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

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

组合选项

'tr'命令还允许我们组合其选项。
例如,以下命令首先将除“ i”以外的所有字符替换为“ 0”,然后压缩重复的“ 0”字符:

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

Tr命令示例

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

将小写转换为大写

将小写转换为大写或者反向是'tr'命令的典型用例之一。
'[:lower:** '匹配所有小写字符,'[:upper:** '匹配所有大写字符。

echo 'theitroad' | tr '[:lower:]' '[:upper:]'
theitroad

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

echo 'theitroad' | 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.txt”的内容传递给“ tr”命令。
重定向'>'将命令的输出写入'new_file.txt'。

在单独的行上打印“ $PATH”目录

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

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

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