tr
是一个在 Linux 和 Unix 系统中常用的命令行工具,主要用于字符的转换和删除。它非常适合用来处理简单的文本转换任务,比如大小写转换、字符替换或删除指定字符等。
tr [选项] SET1 SET2
SET1
: 这是要被替换或操作的字符集合。SET2
: 这是用于替换 SET1
中字符的字符集合。-c, --complement
: 使用 SET1
的补集进行操作。-d, --delete
: 删除 SET1
中的字符。-s, --squeeze-repeats
: 压缩重复出现的字符为单个字符。-t, --truncate-set1
: 将 SET1
截断到 SET2
的长度。echo "hello world" | tr 'a-z' 'A-Z'
输出:
HELLO WORLD
这里,tr
把输入中的所有小写字母(a-z
)替换成了对应的大写字母(A-Z
)。
echo "abc123def456" | tr -d '0-9'
输出:
abcdef
使用 -d
选项删除了所有的数字字符(0-9
),只保留了字母。
echo "aaabbbcccddd" | tr -s 'a-d'
输出:
abcd
通过 -s
选项,连续的相同字符被压缩成一个字符。
echo "hello world" | tr -c '[:alpha:]' '#'
输出:
hello#world
这里 -c
选项指定了非字母字符的补集,并将其替换为 #
。
cat file.txt | tr '\n' ' '
这个命令会把文件中的换行符替换成空格,从而将多行文本合并成一行。
tr
支持一些预定义的字符类,这些字符类可以简化复杂的字符集合定义:
[:alnum:]
: 所有的字母和数字。[:alpha:]
: 所有的字母。[:digit:]
: 所有的数字。[:lower:]
: 所有的小写字母。[:upper:]
: 所有的大写字母。[:space:]
: 所有的空白字符(包括空格、制表符等)。tr
只能处理单个字符的转换,无法处理多个字符组成的字符串。SET1
和 SET2
的长度如果不匹配,可能会导致不可预期的结果。如果 SET2
比 SET1
短,SET2
的最后一个字符会被重复填充。