Linux tr命令与示例
tr是Linux和Unix系统中的命令行程序,可转换,删除和压缩标准输入中的字符,并将结果写入标准输出。
tr
命令通常通过管道与其他命令结合使用,并且可以执行诸如删除重复字符,将大写转换为小写以及基本字符替换和删除之类的操作。
在本教程中,我们将通过实际示例和最常见选项的详细说明向您展示如何使用tr
命令。
如何使用tr命令
tr
命令的语法如下:
tr OPTION... SET1 [SET2]
tr
接受具有相同长度的两组字符,并用第二组中的相应字符替换第一组中的字符。
SET基本上是一个字符串,包括特殊的反斜杠转义字符。
在以下示例中,tr
通过将第一组字符与第二组字符进行映射,来替换标准输入myfreax
中的所有字符。
echo 'myfreax' | tr 'myf' 'red'
tr
会将m
替换为r
,y
替换为e
,将f
替换为d
。
redreax
也可以使用字符范围来定义字符集。例如:
echo 'myfreax' | tr 'lmno' 'wxyz'
您可以使用:
echo 'myfreax' | tr 'l-n' 'w-z'
当使用-c
(--complement
)选项时,tr
将替换集合SET1中不存在的所有字符。
在下面的示例中,所有不在集合SET1中的字符都将替换为SET2中的最后一个字符:
echo 'myfreax' | tr -c 'fa' 'xy'
您可能已经注意到输出比输入多一个可见的字符。这是因为echo
命令会打印一个不可见的换行符\n
,该字符也将替换为y
。让echo
不带换行符的字符串,请使用-n
选项。
yyfyyayy
-d
(--delete
)选项告诉tr
删除集合SET1中指定的字符。
以下命令将删除SET1中指定的所有字符。在不压缩字符的情况下删除字符时,您只能指定一组。
echo 'myfreax' | tr -d 'ea'
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 'myfreax' | tr 'abcde' '12'
输出将显示SET1的e
字符与SET2的最新字符2
:
myfr21x
现在与-t
选项一起使用:
echo 'myfreax' | tr -t 'abcde' '12'
您会看到在这种情况下,SET1的最后三个字符被删除。 SET1变为“ ab”,长度与SET2相同。
myfre1x
组合选项
tr
命令还允许您组合其选项。例如,以下命令将用0
替换除f
以外的所有字符,然后删除重复的0
个字符:
echo 'myfreax' | tr -cs 'f' '0'
0f0
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'
GNUis
an
operating
system
删除空白行
要删除空白行,只需删除重复的换行符:
tr -s '\n' < file.txt > new_file.txt
在上面的命令中,我们使用重定向符号<
将file.txt
的内容传递给tr
命令作为输入。重定向>
将命令的输出写入file.txt
。
在单独的行上打印$PATH
目录
$PATH
环境变量是用冒号分隔的目录列表,告诉shell程序在键入命令时要搜索可执行文件的目录。
要在单独的行上打印每个目录,我们需要匹配冒号(:
)并将其替换为新行:
echo $PATH | tr ':' '\n'
/usr/local/sbin/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
结论
现在,您应该对如何使用Linux tr
命令有很好的了解。尽管非常有用,tr
只能使用单个字符。对于更复杂的模式匹配和字符串处理,应使用sed
或awk
。
以上是 Linux tr命令与示例 的全部内容, 来源链接: utcz.com/z/507359.html