Linux tr命令

参考资料

  1. 【 tr 】コマンド――テキストファイルの文字を置換する/削除する
  2. 【Linux】trコマンド使ってみた【trコマンド】

目录

  • [一. 基本语法](#一. 基本语法)
  • [二. 替换](#二. 替换)
    • [2.1 匹配模式进行替换](#2.1 匹配模式进行替换)
    • [2.2 只支持字符的替换](#2.2 只支持字符的替换)
  • [三. 选项](#三. 选项)
    • [3.1 -d 删除指定字符](#3.1 -d 删除指定字符)
    • [3.2 -s 替换多个重复出现的字符为单个字符](#3.2 -s 替换多个重复出现的字符为单个字符)
    • [3.3 -c 取反](#3.3 -c 取反)

一. 基本语法

⏹用于对输入的文本进行字符转换或删除。它通常用来替换或删除字符,但只能对单个字符进行操作,不能处理正则表达式。

  • SET1:要替换或删除的字符集。

  • SET2

    • 将 SET1中的字符替换为 SET2 中的字符。若 SET2 省略,则默认删除 SET1 中的字符。
    • 💥注意 :替换指的是字符的替换,不是汉字的替换。使用替换汉字的话,会造成乱码。
      建议使用更加强大的sed命令来替换汉字。
  • OPTION

    • -d:删除 SET1 中的字符,而不替换。
    • -s:替换多个重复出现的字符为单个字符。
    • -c:将 SET1 取反操作。
短选项 长选项
-d --delete
-s --squeeze-repeats
-c --complement
bash 复制代码
tr [OPTION] SET1 [SET2]

二. 替换

2.1 匹配模式进行替换

⏹tr命令虽然不支持正则表达式进行替换,但是支持匹配模式替换字符。

bash 复制代码
$ echo "hello world" | tr 'a-z' 'A-Z'
HELLO WORLD
bash 复制代码
$ echo "12345你好" | tr '[1-3]' '*'
***45你好

$ echo "12345你好" | tr '1|3' '*'
*2*45你好

2.2 只支持字符的替换

⏹只支持字符的替换,替换汉字的话,会出现乱码问题

bash 复制代码
# 替换汉字,结果出现乱码问题
fengyehong@ubuntu:~$ echo "你好 世界" | tr "世界" "WORLD"
W��好 WORLDD

# 替换汉字建议使用更加强大的sed命令
fengyehong@ubuntu:~$ echo "你好 世界" | sed "s/世界/WORLD/"
你好 WORLD

三. 选项

3.1 -d 删除指定字符

⏹删除0-9的数字字符

bash 复制代码
fengyehong@ubuntu:~$ echo "hello 123 world" | tr -d '0-9'
hello  world

⏹删除\r字符,实现windows的CRLF换行符转换为linux的LF换行符

bash 复制代码
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.txt

fengyehong@ubuntu:~$ cat info2.txt
aaa
bbb
ccc
ddd
fengyehong@ubuntu:~$ file info2.txt
info2.txt: ASCII text

⏹echo命令指定后默认会添加一个换行符

  • 可以通过-n选项来避免换行符的添加
  • 还可以通过tr -d '\n'删除换行符
bash 复制代码
fengyehong@ubuntu:~$ echo "你好 世界"
你好 世界

fengyehong@ubuntu:~$ echo "你好 世界" | tr -d '\n'
你好 世界fengyehong@ubuntu:~$

fengyehong@ubuntu:~$ echo -n "你好 世界"
你好 世界fengyehong@ubuntu:~$

3.2 -s 替换多个重复出现的字符为单个字符

⏹替换多个空格为一个空格

bash 复制代码
fengyehong@ubuntu:~$ echo "hello   world"
hello   world
fengyehong@ubuntu:~$ echo "hello   world" | tr -s ' '
hello world

tr -s '\n':删除多个连续的换行符

bash 复制代码
fengyehong@ubuntu:~$ file info.txt
info.txt: ASCII text
fengyehong@ubuntu:~$
fengyehong@ubuntu:~$ cat info.txt
aaa

bbb

ccc

ddd

fengyehong@ubuntu:~$ cat info.txt | tr -s '\n'
aaa
bbb
ccc
ddd

3.3 -c 取反

⏹删除1-5之外的所有字符

bash 复制代码
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
相关推荐
FoldWinCard9 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计10 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud12311 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
霸道流氓气质11 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
SakitamaX11 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.11 小时前
Linux系统管理
linux·运维
阿龙的工作记录12 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手12 小时前
Linux的基本指令
linux·运维·服务器
hkj880812 小时前
Ubuntu 切换java版本
java·linux·ubuntu
撩得Android一次心动14 小时前
Linux编程笔记3【个人用】
linux·笔记