Linux 中一个非常强大的文本处理工具——tr, 是“translate”的缩写,顾名思义功能跟转化有关,它可以从标准输入读取数据,进行字符级别的操作,并将处理后的结果输出到标准输出。
基本语法格式:
tr [OPTION] SET1 [SET2]
SET1
:: 要转换或删除的字符集合。SET2
: 用来替换SET1
中对应字符的字符集合(可选)。OPTION:
可选参数,如下:
-c, -C, --complement
: 使用SET1
的补集,即除了SET1
中定义的字符外的所有字符。-d, --delete
: 删除SET1
中出现的所有字符。-s, --squeeze-repeats
: 将重复出现的字符压缩为单个字符。-t, --truncate-set1
: 首先截断SET1
到与SET2
相同长度。
常见用法示例:
1.字符转换
将小写字母转换为大写字母:
当提供两个字符集时,tr
会创建一个从 SET1
到 SET2
的一对一映射。对于输入中的每个字符,如果它出现在 SET1
中,则会被替换为 SET2
中对应的字符。例如,在 'a-z'
到 'A-Z'
的映射中,a
会被替换为 A
,b
替换为 B
,以此类推。
输入:
echo "hello" | tr 'a-z' 'A-Z'
输出:
HELLO
2.删除字符 - d
当仅提供一个字符集并使用 -d
选项时,tr
会从输入中删除所有出现在该字符集中的字符。
输入:
echo "aa12bb" | tr -d "0-9"
输出:
aabb
3.压缩重复字符 - s
使用 -s
选项可以压缩连续出现的相同字符,使其只保留一个实例。这通过检查当前字符是否与前一个字符相同来实现。
输入:
echo "1024 one" | tr -s " "
输出:
1024 one
4.使用补集
删除所以非字母的字符
输入:
echo "hello 666 @#@ wwW" | tr -cd "a-zA-Z"
可使用"[:alpha:]":
表示所有字母字符
输出:(换行符也会被删掉哦)
hellowwW
tr
的局限性
-
不支持正则表达式:
-
tr
只能处理字符级别的操作,无法处理复杂的模式匹配。
-
-
字符集限制:
-
tr
只能处理单字节字符(如 ASCII 字符),无法直接处理多字节字符(如 UTF-8 编码的中文字符)。
-
-
功能单一:
-
tr
的功能相对单一,适合简单的字符转换和删除操作,复杂的文本处理需要结合其他工具(如sed
或awk
)。
-