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 的最后一个字符会被重复填充。