当前位置: 首页 > news >正文

linux常用命令:tr 命令

  tr 命令实现字符转换功能,其功能类似于 sed 命令,但是,tr 命令比 sed 命令简单。也就是说,tr 命令能实现的功能,sed 命令都可以实现。尽管如此,tr 命令依然是 Linux 系统下处理文本的常用命令。

1.命令格式:

  tr [选项]... SET1 SET2

2.命令功能:

  从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

3.常用参数:

-c, -C, --complement        用集合1中的字符串替换,要求字符集为ASCII。
-d, --delete               删除匹配S ET1 的内容,并不作替换
-s, --squeeze-repeats     如果匹配于 SET1 的字符在输入序列中存在连续的重复,在替换时会被统一缩为一个字符的长度
-t, --truncate-set1         先将 SET1 的长度截为和 SET2 相等
    --help        显示此帮助信息并退出
    --version    显示版本信息并退出

---------------------------------------------------------------------------------

SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:


  \NNN    八进制值为NNN 的字符(1 至3 个数位)
  \\        反斜杠
  \a        终端鸣响
  \b        退格
  \f        换页
  \n        换行
  \r        回车
  \t        水平制表符
  \v        垂直制表符
  字符1-字符2    从字符1 到字符2 的升序递增过程中经历的所有字符
  [字符*]    在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度
  [字符*次数]    对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数
  [:alnum:]    所有的字母和数字
  [:alpha:]    所有的字母
  [:blank:]    所有呈水平排列的空白字符
  [:cntrl:]    所有的控制字符
  [:digit:]    所有的数字
  [:graph:]    所有的可打印字符,不包括空格
  [:lower:]    所有的小写字母
  [:print:]    所有的可打印字符,包括空格
  [:punct:]    所有的标点字符
  [:space:]    所有呈水平或垂直排列的空白字符
  [:upper:]    所有的大写字母
  [:xdigit:]    所有的十六进制数
  [=字符=]    所有和指定字符相等的字符

仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。

仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式补充到同SET1 等长。SET2 中多余的字符将被省略。

只有[:lower:] 和[:upper:]以升序展开字符;

在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1,既不
替换也不删除,否则在替换或展开后使用SET2 缩减。

 

4.常用格式:

  tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file

这里:

  • -c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
  • -d 删除字符串1中所有输入字符。
  • -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
  • input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。

字符范围:

  • 指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
  • [a-z] a-z内的字符组成的字符串。
  • [A-Z] A-Z内的字符组成的字符串。
  • [0-9] 数字串。
  • \octal 一个三位的八进制数,对应有效的ASCII字符。
  • [O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。

5.常用示例:

示例1:将文件file中出现的"abc"替换为"xyz"

1 [root@Gin scripts]# cat t.txt
2 abc
3 [root@Gin scripts]# cat t.txt |tr "abc" "xyz"
4 xyz
5 [root@Gin scripts]# cat t.txt
6 abc

 【注意】这里,凡是在t.txt文件中出现的"a"字母,都替换成"x"字母,"b"字母替换为"y"字母,"c"字母替换为"z"字母。而不是将字符串"abc"替换为字符串"xyz"。这里的替换不修改源文件。

 

示例2:使用tr命令“统一”字母大小写

1 [root@Gin scripts]# cat file
2 abc
3 [root@Gin scripts]# cat file|tr [a-z] [A-Z]
4 ABC

 

说明:大写转小写只需要把tr后面的参数换个位置即可!

 

示例3:把文件中的数字0-9替换为a-j

1 [root@Gin scripts]# cat file|tr [0-9] [a-j]
2 abcdefghij

 

 

示例4:删除文件file中出现的"Snail"字符

[root@Gin scripts]# cat file
what is Snail
[root@Gin scripts]# cat file|tr -d "Snail"
wht s
[root@Gin scripts]# cat file
what is Snail

【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串。

 

示例5:删除文件file中出现的换行'\n'、制表'\t'字符

# cat file | tr -d "\n\t"

 

 

示例6:删除空行

1 # cat file | tr -s "\n" > new_file

 

 

示例7:删除Windows文件“造成”的'^M'字符

1 # cat file | tr -d "\r"
2 或者
3 # cat file | tr -s "\r" "\n"

 

【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者

 

示例8:用空格符\040替换制表符\011

1 # cat file | tr -s "\011" "\040"

 

 

示例9:把路径变量中的冒号":",替换成换行符"\n"

1 # echo $PATH | tr -s ":" "\n"

 

 

示例10:实际应用1,加密解密:

1 [root@Gin scripts]# echo 12345|tr '0-9' '987654321'  ## 加密
2 87654
3 [root@Gin scripts]# echo 87654|tr '987654321' '0-9'  ## 解密
4 12345

 

上面是一个非常有趣的小例子,通过映射来实现简单的加密解密,看懂这个例子,可以接着往下看古罗马时期发明的凯撒加密的一种变体ROT13

[root@Gin scripts]# echo "hi,this is amosli" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
uv,guvf vf nzbfyv
[root@Gin scripts]# echo "uv,guvf vf nzbfyv" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'
hi,this is amosli

 

ROT13是它自己本身的逆反;也就是说,要还原ROT13,套用加密同样的算法即可得,故同样的操作可用再加密与解密。非常神奇!

 

示例11:实际应用2,字符集补集:

1 tr -c [set1] [set2]

 

set1的补集意味着从这个集合中包含set1中没有的所有字符。最典型的用法就是从输入文本中将不在补集中的所有字符全部删除。例如:

1 [root@Gin scripts]# echo "hello 123 world " | tr -d -c '0-9 \n'
2  123

 

在这里,补集中包含了除数字、空格字符和换行符之外的所有字符,因为指定了-d,所以这些字符全部都会被删除。

 

示例12:实际应用3,用tr压缩字符:

1 [root@Gin scripts]# echo "GNU is  not          UNIX . Recursicve right?" | tr -s  ' '
2 GNU is not UNIX . Recursicve right?

 

使用-s参数可以压缩字符串中重复的字符。看另一个例子:

 1 [root@Gin scripts]# cat sum.txt
 2 5
 3 4
 4 3
 5 5
 6 4
 7 3
 8 [root@Gin scripts]# cat sum.txt|echo $[ $(tr '\n' '+') 0 ]
 9 24
10 [root@Gin scripts]# cat sum.txt|echo $[ $(tr '\n' '+') ] 
11 -bash: 5+4+3+5+4+3+ : syntax error: operand expected (error token is "+ ")

 这里,运用tr实现了加法运算, tr '\n' '+'使用换行符来替换为'+'然后连接起来,最后多出来一个'+'再接上数字0即实现了加法。

 


 

6.总结

  有一个误区很容易被误理解成SET1,SET2是一个字符组合,其实不是这样的;SET1和SET2里面都是值的单个字符之间的替换,比如'ab'不要把ab理解成一个组合,tr还有很多的巧妙的用法这需要多去实践。

 

转载于:https://www.cnblogs.com/shujuxiong/p/8990342.html

相关文章:

  • bzoj 4574: [Zjoi2016]线段树
  • 数据结构-绪论
  • 安装Emacs并设置racket环境
  • 记录一次我的造成的生产事故
  • JavaScript三(对象思想)
  • IDEA搭建工程
  • python学习笔记-day7-2-【python从mysql数据库导数据到excel,读excel,修改excel】
  • linux下实现多台服务器同步文件(inotify-tools+rsync实时同步文件安装和配置)
  • Python实用笔记 (15)函数式编程——装饰器
  • LuoguP3621 [APIO2007]风铃
  • Python变量和基本数据类型
  • Transaction rolled back because it has been marked as rollback-only
  • 微信网页版的onclick事件不起作用
  • 记录MongoDB常用查询
  • Linux环境下mysql的root密码忘记解决方法(2种)
  • $translatePartialLoader加载失败及解决方式
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 0基础学习移动端适配
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • gf框架之分页模块(五) - 自定义分页
  • js
  • nginx 负载服务器优化
  • React-redux的原理以及使用
  • Redis 懒删除(lazy free)简史
  • 从零开始学习部署
  • 分享一份非常强势的Android面试题
  • 关于使用markdown的方法(引自CSDN教程)
  • 技术发展面试
  • 力扣(LeetCode)21
  • 前言-如何学习区块链
  • 手机端车牌号码键盘的vue组件
  • 移动端 h5开发相关内容总结(三)
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​Java并发新构件之Exchanger
  • (003)SlickEdit Unity的补全
  • (NSDate) 时间 (time )比较
  • (Python第六天)文件处理
  • (ZT)出版业改革:该死的死,该生的生
  • (差分)胡桃爱原石
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)memcache、redis缓存
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ./configure,make,make install的作用(转)
  • .Net 4.0并行库实用性演练
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET设计模式(8):适配器模式(Adapter Pattern)