Linux tr命令介绍
tr是一个用来转换或删除文件中字符的命令。它可以从标准输入读取数据,经过字符串转换后,输出到标准输出。tr的全称是translate,意思是翻译或转换。tr可以用来实现一些简单的文本处理功能,比如大小写转换,删除空白字符,替换特殊字符等。
适用的Linux版本
tr命令是一个基本的Linux命令,它适用于大多数的Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。如果某些Linux系统没有安装tr命令,可以使用包管理工具进行安装。例如,在CentOS 7上,可以使用以下命令安装tr:
sudo yum install coreutils
在CentOS 8上,可以使用以下命令安装tr:
sudo dnf install coreutils
Linux tr命令的基本用法
tr命令的语法格式如下:
tr [选项]... 字符集1 [字符集2]
其中,字符集1和字符集2是一组字符或字符范围,用来指定转换或删除的对象。选项可以用来控制tr的行为,常用的选项有:
- -c, --complement:反选字符集1,即匹配不在字符集1中的所有字符。
- -d, --delete:删除字符集1中的所有字符,不进行转换。
- -s, --squeeze-repeats:将连续重复的字符压缩为一个字符。
- -t, --truncate-set1:将字符集1截断为与字符集2相同的长度。
Linux tr命令的常用选项说明
下表列出了tr命令的一些常用选项及其说明:
选项 | 说明 |
---|---|
-c, --complement | 反选字符集1 |
-d, --delete | 删除字符集1中的所有字符 |
-s, --squeeze-repeats | 压缩连续重复的字符 |
-t, --truncate-set1 | 截断字符集1 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
Linux tr命令的实例
下面给出了一些使用tr命令的实例:
- 将文件中的小写字母转换为大写字母:
# 假设文件test.txt中的内容为:
# hello world
# this is a test
# 使用tr命令将小写字母转换为大写字母,并输出到标准输出:
cat test.txt | tr a-z A-Z
# 输出结果为:
HELLO WORLD
THIS IS A TEST
- 将文件中的数字替换为星号:
# 假设文件test.txt中的内容为:
# my phone number is 1234567890
# my id number is 9876543210
# 使用tr命令将数字替换为星号,并输出到标准输出:
cat test.txt | tr 0-9 '*'
# 输出结果为:
my phone number is **********
my id number is **********
- 删除文件中的空白字符(空格,制表符,换行符等):
# 假设文件test.txt中的内容为:
# hello world
# this is a test
# 使用tr命令删除空白字符,并输出到标准输出:
cat test.txt | tr -d '[:space:]'
# 输出结果为:
helloworldthisisatest
- 压缩文件中连续重复的空白字符为一个空格:
# 假设文件test.txt中的内容为:
# hello world
# this is a test
# 使用tr命令压缩空白字符,并输出到标准输出:
cat test.txt | tr -s '[:space:]' ' '
# 输出结果为:
hello world
this is a test
- 将文件中不是字母或数字的字符替换为下划线:
# 假设文件test.txt中的内容为:
# hello-world!
# this_is_a_test.
# 使用tr命令替换非字母数字字符,并输出到标准输出:
cat test.txt | tr -c '[:alnum:]' '_'
# 输出结果为:
hello_world_
this_is_a_test_
Linux tr命令的注意事项
- tr命令只能处理单个字符,不能处理字符串。如果需要处理字符串,可以使用sed或awk等工具。
- tr命令只能从标准输入读取数据,不能直接操作文件。如果需要修改文件,可以使用重定向或管道等方式。
- tr命令的字符集可以使用一些特殊的表示方式,如下表所示:
表示方式 | 含义 |
---|---|
\NNN | 八进制值为NNN的字符 |
\\ | 反斜杠字符 |
\a | Ctrl-G,响铃字符 |
\b | Ctrl-H,退格字符 |
\f | Ctrl-L,换页字符 |
\n | Ctrl-J,换行字符 |
\r | Ctrl-M,回车字符 |
\t | Ctrl-I,制表符 |
\v | Ctrl-X,垂直制表符 |
CHAR1-CHAR2 | 从CHAR1到CHAR2的字符范围,按照ASCII码顺序 |
[CHAR*] | 重复CHAR字符直到与另一个字符集长度相同,只能用于字符集2 |
[CHAR*REPEAT] | 重复CHAR字符REPEAT次,REPEAT为八进制数,只能用于字符集2 |
[:alnum:] | 所有字母和数字 |
[:alpha:] | 所有字母 |
[:blank:] | 所有水平空白字符 |
[:cntrl:] | 所有控制字符 |
[:digit:] | 所有数字 |
[:graph:] | 所有可打印的非空白字符 |
[:lower:] | 所有小写字母 |
[:print:] | 所有可打印的字符 |
[:punct:] | 所有标点符号 |
[:space:] | 所有水平和垂直空白字符 |
[:upper:] | 所有大写字母 |
[:xdigit:] | 所有十六进制数字 |
Linux tr命令的高级技巧
- 使用tr命令加密或解密文本:
# 假设文件test.txt中的内容为:
# hello world
# 使用tr命令将每个字母替换为其后面的第三个字母,并输出到标准输出:
cat test.txt | tr 'a-z' 'd-za-c'
# 输出结果为:
khoor zruog
# 使用tr命令将加密后的文本还原,并输出到标准输出:
cat test.txt | tr 'd-za-c' 'a-z'
# 输出结果为:
hello world
- 使用tr命令统计文件中单词的个数:
# 假设文件test.txt中的内容为:
# hello world
# this is a test
# 使用tr命令将非空白字符替换为换行符,并输出到标准输出:
cat test.txt | tr -s '[:space:]' '\n'
# 输出结果为:
hello
world
this
is
a
test
# 使用wc命令统计输出结果中的行数,即单词个数:
cat test.txt | tr -s '[:space:]' '\n' | wc -l
# 输出结果为:
6
- 使用tr命令生成随机密码:
# 使用/dev/urandom设备生成随机数据,并使用base64编码,并使用tr命令删除不需要的字符,并截取前10个字符作为密码,并输出到标准输出:
cat /dev/urandom | base64 | tr -d '/+=\n' | head -c 10
# 输出结果为(每次运行可能不同):
YjRjMjU5MT
评论区