linux tr,Linux Tr命令与示例

tr是Linux和Unix系统中用于字符转换和删除的命令行工具,常与其他命令通过管道结合使用。本文通过实例和选项详细讲解了如何使用tr命令,包括字符替换、删除、挤压重复字符、截断字符集等操作,适用于文本处理和字符串操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

如何使用Tr命令

tr命令的语法如下:tr OPTION... SET1 [SET2]

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

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

在以下示例中,tr通过将第一组字符与第二组字符进行映射,来替换标准输入myfreax中的所有字符。echo 'myfreax' | tr 'lin' 'red'

tr会将l的每次出现替换为r,i替换为e,将n替换为d。reduxeze

也可以使用字符范围来定义字符集。例如,不要写:echo 'myfreax' | tr 'lmno' 'wxyz'

您可以使用:echo 'myfreax' | tr 'l-n' 'w-z'

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

在下面的示例中,所有不在SET1中的字符都将替换为SET2中的最后一个字符:echo 'myfreax' | tr -c 'li' 'xy'

您可能已经注意到输出比输入多一个可见的字符。这是因为echo命令会打印一个不可见的换行符\n,该字符也将替换为y。要回显不带换行符的字符串,请使用-n选项。liyyyiyyy

-d(--delete)选项告诉tr删除SET1中指定的字符。

以下命令将删除SET1中指定的所有字符。在不压缩字符的情况下删除字符时,您只能指定一组。echo 'myfreax' | tr -d 'ea'

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

-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'

您会看到在这种情况下,SET1的最后三个字符被删除。 SET1变为“ ab”,长度与SET2相同。Linux ize

组合选项

tr命令还允许您组合其选项。例如,以下命令将用0替换除i以外的所有字符,然后挤压重复的0个字符:echo 'Linux ize' | tr -cs 'i' '0'0i0i0

Tr命令示例

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

将小写字母转换为大写字母

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

除了字符类,您还可以使用范围:echo 'myfreax' | tr 'a-z' 'A-Z'

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

删除所有非数字字符

以下示例将从传递给tr命令的输入中删除所有非数字字符: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。

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

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

要在单独的行上打印每个目录,我们需要匹配冒号(:)并将其替换为新行:echo $PATH | tr ':' '\n'/usr/local/sbin

/usr/local/bin

/usr/sbin

/usr/bin

/sbin

/bin

结论

现在,您应该对如何使用Linux tr命令有很好的了解。尽管非常有用,tr只能使用单个字符。对于更复杂的模式匹配和字符串处理,应使用sed或awk。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值