tr(translate)是 Linux 中用于字符转换和删除的命令。它从标准输入读取数据,进行字符转换或删除操作,然后输出到标准输出。
1 2 3 4 5 6 7 8 9 10 11
| ➜ tr --help 用法: tr [选项]... SET1 [SET2] Translate, squeeze, and/or delete characters from standard input, writing to standard output.
-c, -C, --complement 使用SET1的补集 -d, --delete 删除SET1中的字符,不转换 -s, --squeeze-repeats 将SET1中重复的字符压缩为一个 -t, --truncate-set1 先将SET1截断为SET2的长度 --help 显示此帮助信息并退出 --version 输出版本信息并退出
|
基本语法
常用选项
| 选项 |
说明 |
-d, --delete |
删除 SET1 中的字符 |
-s, --squeeze-repeats |
压缩 SET1 中重复的字符 |
-c, --complement |
使用 SET1 的补集 |
-t, --truncate-set1 |
将 SET1 截断为 SET2 的长度 |
基本使用
字符转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ➜ echo "hello world" | tr 'a-z' 'A-Z' HELLO WORLD
➜ echo "HELLO WORLD" | tr 'A-Z' 'a-z' hello world
➜ echo "12345" | tr '0-9' '9876543210' 87654
➜ echo "hello" | tr 'el' 'EL' hELLo
|
删除字符
1 2 3 4 5 6 7 8 9 10
| ➜ echo "abc123def" | tr -d '0-9' abcdef
➜ echo "hello world" | tr -d ' ' helloworld
➜ tr -d '\n' < file.txt
|
压缩字符
1 2 3 4 5 6 7 8 9 10
| ➜ echo "hello world" | tr -s ' ' hello world
➜ tr -s '\n' < file.txt
➜ echo "aaabbbccc" | tr -s 'abc' abc
|
使用字符类
1 2 3 4 5 6 7 8 9
| ➜ echo "Hello123" | tr '[:lower:]' '[:upper:]' HELLO123
➜ echo "Hello123" | tr '[:upper:]' '[:lower:]' hello123
➜ echo "Hello123" | tr '[:digit:]' 'X' HelloXXX
|
实际应用场景
文本格式化
1 2 3 4 5 6 7 8 9 10 11 12
| ➜ tr -d '\n' < file.txt | tr -s ' '
➜ echo "a b c d" | tr ' ' '\n' a b c d
➜ tr '\t' ' ' < file.txt
|
数据处理
1 2 3 4 5 6 7 8 9
| ➜ tr -d '!@#$%^&*' < file.txt
➜ echo "Hello123!@#" | tr -d -c '[:alnum:]' Hello123
➜ tr -s ' ' < file.txt
|
与其他命令组合
1 2 3 4 5 6 7 8 9 10
| ➜ echo "hello world test" | tr ' ' '\n' | wc -l
➜ echo "abc123def456" | tr -d -c '[:digit:]' 123456
➜ echo "abc123def456" | tr -d -c '[:alpha:]' abcdef
|
注意事项
- SET1 和 SET2:如果 SET2 比 SET1 短,SET2 会重复最后一个字符
- 字符类:可以使用
[:alnum:]、[:alpha:]、[:digit:] 等字符类
- 转义字符:特殊字符需要转义,如
\n、\t 等
- 性能:tr 处理速度很快,适合处理大量数据
参考文献