参考资料
- 【 tr 】コマンド――テキストファイルの文字を置換する/削除する
- 【Linux】trコマンド使ってみた【trコマンド】
目录
- 一. 基本语法
- 二. 替换
- 2.1 匹配模式进行替换
- 2.2 只支持字符的替换
- 三. 选项
- 3.1 -d 删除指定字符
- 3.2 -s 替换多个重复出现的字符为单个字符
- 3.3 -c 取反
一. 基本语法
⏹用于对输入的文本进行字符转换或删除。它通常用来替换或删除字符,但只能对单个字符进行操作,不能处理正则表达式。
-
SET1
:要替换或删除的字符集。 -
SET2
:- 将 SET1中的字符替换为 SET2 中的字符。若 SET2 省略,则默认删除 SET1 中的字符。
- 💥注意:替换指的是
字符
的替换,不是汉字的替换。使用替换汉字的话,会造成乱码。
建议使用更加强大的sed命令来替换汉字。
-
OPTION
-d
:删除 SET1 中的字符,而不替换。-s
:替换多个重复出现的字符为单个字符。-c
:将 SET1 取反操作。
短选项 | 长选项 |
---|---|
-d | –delete |
-s | –squeeze-repeats |
-c | –complement |
tr [OPTION] SET1 [SET2]
二. 替换
2.1 匹配模式进行替换
⏹tr命令虽然不支持正则表达式进行替换,但是支持匹配模式替换字符。
$ echo "hello world" | tr 'a-z' 'A-Z'
HELLO WORLD
$ echo "12345你好" | tr '[1-3]' '*'
***45你好$ echo "12345你好" | tr '1|3' '*'
*2*45你好
2.2 只支持字符的替换
⏹只支持字符的替换,替换汉字的话,会出现乱码问题
# 替换汉字,结果出现乱码问题
fengyehong@ubuntu:~$ echo "你好 世界" | tr "世界" "WORLD"
W��好 WORLDD# 替换汉字建议使用更加强大的sed命令
fengyehong@ubuntu:~$ echo "你好 世界" | sed "s/世界/WORLD/"
你好 WORLD
三. 选项
3.1 -d 删除指定字符
⏹删除0-9
的数字字符
fengyehong@ubuntu:~$ echo "hello 123 world" | tr -d '0-9'
hello world
⏹删除\r
字符,实现windows的CRLF
换行符转换为linux的LF
换行符
fengyehong@ubuntu:~$ cat info.txt
aaa
bbb
ccc
ddd# 查看换行符
fengyehong@ubuntu:~$ file info.txt
info.txt: ASCII text, with CRLF line terminators# 删除\r字符
fengyehong@ubuntu:~$ cat info.txt | tr -d '\r' > info2.txtfengyehong@ubuntu:~$ cat info2.txt
aaa
bbb
ccc
ddd
fengyehong@ubuntu:~$ file info2.txt
info2.txt: ASCII text
⏹echo命令指定后默认会添加一个换行符
- 可以通过-n选项来避免换行符的添加
- 还可以通过
tr -d '\n'
删除换行符
fengyehong@ubuntu:~$ echo "你好 世界"
你好 世界fengyehong@ubuntu:~$ echo "你好 世界" | tr -d '\n'
你好 世界fengyehong@ubuntu:~$fengyehong@ubuntu:~$ echo -n "你好 世界"
你好 世界fengyehong@ubuntu:~$
3.2 -s 替换多个重复出现的字符为单个字符
⏹替换多个空格为一个空格
fengyehong@ubuntu:~$ echo "hello world"
hello world
fengyehong@ubuntu:~$ echo "hello world" | tr -s ' '
hello world
⏹tr -s '\n'
:删除多个连续的换行符
fengyehong@ubuntu:~$ file info.txt
info.txt: ASCII text
fengyehong@ubuntu:~$
fengyehong@ubuntu:~$ cat info.txt
aaabbbcccdddfengyehong@ubuntu:~$ cat info.txt | tr -s '\n'
aaa
bbb
ccc
ddd
3.3 -c 取反
⏹删除1-5
之外的所有字符
fengyehong@ubuntu:~$ echo "123456789FFFKK"
123456789FFFKK
fengyehong@ubuntu:~$
fengyehong@ubuntu:~$ echo "123456789FFFKK" | tr -dc '[1-5]'
12345fengyehong@ubuntu:~$
# 删除1到5之外的所有字符(换行符也被删除了)之后,通过printf进行打印的时候,再加上换行符
fengyehong@ubuntu:~$ echo "123456789FFFKK" | tr -dc '[1-5]' | xargs printf "%s\n"
12345