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
相关推荐
丢掉幻想准备斗争1 小时前
Linux-进程概念(一)
linux
孤的心了不冷1 小时前
【Docker】CentOS 8.2 安装Docker教程
linux·运维·docker·容器·eureka·centos
程序员JerrySUN3 小时前
Linux 内核核心知识热点题分析:10 个连环打通的难点
linux·运维·服务器
R_.L4 小时前
Linux : 线程【同步与互斥】
linux
再睡一夏就好4 小时前
从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
linux·服务器·c语言·开发语言·学习笔记
honey ball9 小时前
R & S的EMI接收机面板
linux·运维·网络
柳如烟@11 小时前
在Rocky Linux 9.5上部署MongoDB 8.0.9:从安装到认证的完整指南
linux·运维·mongodb
QQ27402875612 小时前
Kite AI 自动机器人部署教程
linux·运维·服务器·人工智能·机器人·web3
.小墨迹12 小时前
Apollo学习——planning模块(3)之planning_base
linux·开发语言·c++·学习·自动驾驶
影龙帝皖13 小时前
Linux服务之lvs+keepalived nginx+keepalived负载均衡实例解析
linux·nginx·lvs