tr
(translate)是Linux系统中一个非常实用的命令行工具,主要用于字符转换或删除操作。它从标准输入读取数据,执行指定的转换处理,并将结果输出到标准输出。tr
命令的主要功能包括但不限于大小写转换、删除特定字符、压缩重复字符等。
功能与特性
- 字符替换:可以将一组字符替换成另一组字符。例如,将所有的小写字母转换成大写字母。
- 字符删除:可以从输入流中删除指定的字符集。
- 字符压缩:可以缩减连续重复出现的字符为单个字符。
- 字符补集:能够处理不属于指定字符集的所有字符。
- 支持正则表达式风格的字符类:如
[:lower:]
表示所有小写字母,[:digit:]
表示所有数字等,使得字符集定义更加灵活。
使用方法
命令格式
tr [选项] SET1 [SET2]
- 选项:用于调整
tr
的行为,比如是否使用字符集的补集、是否删除字符等。 - SET1 和 SET2:分别是源字符集和目标字符集。当只提供了
SET1
时,通常意味着要删除这些字符;如果同时提供了SET1
和SET2
,则表示进行字符替换。
常用选项
以下是一些常用的 tr
选项及其功能:
-c
或--complement
:对SET1
取反,即处理不在SET1
中的字符。-d
或--delete
:删除SET1
中的所有字符。-s
或--squeeze-repeats
:把连续重复的字符压缩成单独一个字符。-t
或--truncate-set1
:当SET1
比SET2
长时,截断SET1
至与SET2
等长。
示例
1. 替换字符
将所有小写字母转换为大写:
echo "hello world" | tr '[:lower:]' '[:upper:]'
这会输出 HELLO WORLD
。
2. 删除字符
移除字符串中所有的数字:
echo "abc123def456" | tr -d '0-9'
结果将是 abcdef
。
3. 压缩重复字符
将连续的空格压缩成一个空格:
echo "Hello World" | tr -s ' '
输出将是 Hello World
。
4. 字符集之间的翻译
将英文字母从大写转换为小写,反之亦然:
echo "HeLlO wOrLd" | tr 'a-zA-Z' 'A-Za-z'
输出将会是 hElLo WoRlD
。
5. 转换特殊字符
将制表符转换为空格:
echo -e "hello\tworld" | tr '\t' ' '
结果将是 hello world
。
6. 互换两个字符的位置
交换文件内容中的逗号和分号:
tr ',' ';' < inputfile > outputfile
这里假设输入文件包含逗号,而想要将它们全部替换成分号。
7. 使用集合定义进行转换
使用POSIX字符类来替换非字母字符为下划线:
echo "Hello, World!" | tr -c '[:alpha:]' '_'
这会把除了字母以外的所有字符都替换为下划线,输出类似于 Hello__World_
。
8. 删除控制字符
删除不可打印的ASCII字符(如退格、铃声等):
cat file.txt | tr -cd '\11\12\15\40-\176'
这里 \11
是水平制表符(TAB),\12
是换页符,\15
是回车符(CR),\40-\176
是可打印的ASCII字符范围。
9. 删除空白行
从文件中删除所有空白行(只包含空格或制表符的行也会被删除):
tr -s '\n' < file.txt
此命令通过压缩换行符来实现这一点。
10. 创建密码
生成一个随机密码,长度为8个字符,包含大小写字母和数字:
</dev/urandom tr -dc 'A-Za-z0-9' | head -c8
这条命令首先从 /dev/urandom
中读取随机字节流,然后用 tr
筛选出所需的字符集,并限制输出长度。
11. 将多行合并为一行
将多个文本行合并为单个文本行,用空格分隔:
tr '\n' ' ' < multilinefile.txt
或者如果需要保留原始行尾的换行符,但仍然想将所有行合并到一行上,可以这样做:
tr '\n' '\r' < multilinefile.txt | tr '\r' ' '
12. 统计字符频率
统计给定文本中每个字符出现的次数(这是一个稍微复杂的例子,结合了其他命令):
echo "aaabbc" | tr -cd '[:alnum:]' | fold -w1 | sort | uniq -c | sort -nr
这段代码将过滤掉非字母数字字符,将每个字符单独放在一行上,排序并计算每个字符的数量,最后按降序排列结果。
标签:字符,删除,字符集,tr,echo,详解,SET1,Linux From: https://blog.csdn.net/weixin_56303229/article/details/144652856