012.tr

news2024/11/26 20:19:21
1、用tr进行转换

tr是Unix命令行专家工具箱中的一件万能工具。它可用于编写优雅的单行命令。tr可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。tr是translate(转换)的简写,因为它可以将一组字符转换成另一组字符。

tr只能通过stdin(标准输入)接收输入(无法通过命令行参数接收)。其调用格式如下:

tr [options] set1 set2
  • 来自stdin的输入字符会按照位置从set1映射到set2(set1中的第一个字符映射到set2中的第一个字符,以此类推),然后将输出写入stdout(标准输出)。set1和set2是字符类或字符组。
  • 如果两个字符组的长度不相等,那么set2会不断复制其最后一个字符,直到长度与set1相同。
  • 如果set2的长度大于set1,那么在set2中超出set1长度的那部分字符则全部被忽略。
# 将输入中的字符由大写转换成小写
echo "WHO IS THIS" | tr 'A-Z' 'a-z'
  • 'A-Z'和'a-z'都是字符组。我们可以按照需要追加字符或字符类来构造自己的字符组。
  • 'ABD-}'、'aA.,'、'a-ce-x'以及'a-c0-9'等均是合法的集合。定义集合也很简单,不需要书写一长串连续的字符序列,只需要使用“起始字符-终止字符”这种格式就行了。这种写法也可以和其他字符或字符类结合使用。
  • 如果“起始字符-终止字符”不是有效的连续字符序列,那么它就会被视为含有3个元素的集合(起始字符、-和终止字符)。你也可以使用像'\t'、'\n'这种特殊字符或其他ASCII字符。

在tr中利用集合的概念,可以轻松地将字符从一个集合映射到另一个集合中,个用tr进行数字加密和解密的例子:

# 加密
echo 12345 | tr '0-9' '9876543210' # 87654

# 解密
echo 87654 | tr '9876543210' '0-9' # 12345

tr命令可以用来加密。ROT13是一个著名的加密算法。在ROT13算法中,字符会被移动13个位置,因此文本加密和解密都使用同一个函数:

 # 下面命令会输出:ge pnzr, ge fnj, ge pbadhrerq.
 echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
  • t -> g:t 在 a-z 这个集合中是第 20 个字符,相应的 n-z 的第 20 个字符是 g
  • r -> e:r 在 a-z 这个集合中是第 18 个字符,相应的 n-z 的第 18 个字符是 e
  • 以此类推
2、用tr删除字符:-d

tr有一个选项-d,可以通过指定需要被删除的字符集合,将出现在stdin中的特定字符清除掉:stdin | tr -d '[set1]'

echo "Hello 123 World 456" | tr -d '0-9'		# 输出:Hello World
3、字符组补齐:-c

使用选项 -c 来使用set1的补集(set2是可选的):tr -c [set1] [set2]

  • 如果只给出了set1,那么tr会删除所有不在set1中的字符。
  • 如果也给出了set2,tr会将不在set1中的字符转换成set2中的字符。
  • 如果使用了-c选项,set1和set2必须都给出。
  • 如果-c与-d选项同时出现,你只能使用set1,其他所有的字符都会被删除。
# 从输入文本中删除不在补集中的所有字符:结果输出—— 1 2 3
echo "hello 1 char 2 next 3" | tr -d -c '0-9 \n'
  • '0-9 \n' 中的 \n 只是用来给标准输出换行的
# 将不在set1中的字符替换成空格:
echo hello 1 char 2 next 4 | tr -c '0-9 \n' ' '

4、用tr压缩字符:-s

tr可以删除字符串中重复出现的字符:tr -s '[需要被压缩的一组字符]'

# 在不删除重复字母的情况下去掉多余的空格
echo "GNU is         not    UNIX.  Recursive    right?" | tr -s ' '

# tr还可以用来删除多余的换行符:
 cat multi_blanks.txt | tr -s '\n'

上面的例子展示了如何使用tr删除多余的'\n'字符。接下来让我们用tr以一种巧妙的方式将文件中的数字列表进行相加:

# 下面命令输出结果为 15
cat sum.txt | echo $[ $(tr '\n' '+') 0 ]
  • 在命令中,tr命令将'\n'替换成了'+',我们因此得到了字符串1+2+3+..5+,但是在字符串的尾部多了一个操作符+。为了抵消这个多出来的操作符,我们再追加一个0。
  • $[ operation ]执行算术运算,因此就形成了以下命令:echo $[ 1+2+3+4+5+0 ]
  • 如果我们利用循环从文件中读取数字,然后再进行相加,那肯定得用几行代码。有了tr,只用一行就搞定了。

如果有一个包含字母和数字的文件,我们想计算其中的数字之和,这需要更强的技巧性:

# 利用tr的-d选项删除文件中的字母,然后将空格替换成+:
cat test.txt | tr -d [a-z] | echo "total: $[$(tr ' ' '+')]"		# 输出结果为 6
5、tr支持的字符类

可以按照下面的方式选择所需的字符类:tr [:class:] [:class:]

tr '[:lower:]' '[:upper:]'

tr可以将不同的字符类作为集合使用

alnum:字母和数字。

alpha:字母。

cntrl:控制(非打印)字符。

digit:数字。

graph:图形字符。

lower:小写字母。

print:可打印字符。

punct:标点符号。

space:空白字符。

upper:大写字母。

xdigit:十六进制字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1219192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IgH Master环境搭建

目标:实时linux内核中运行IgH主站,ethercat的用户态工具能看到主站信息。 一、需要的软件 1,vbox虚拟机 https://www.virtualbox.org/,下载VirtualBox 7.0, 备注:windows中不要用wsl开发,wsl运行unbuntu…

无需云盘,不限流量实现Zotero跨平台同步:内网穿透+私有WebDAV服务器

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 无需云盘,不限流量实现Zotero跨平台同步:内网穿透私有WebDAV服务器 文章目…

C#实现将Mysql数据迁移到SQL数据库

前提源数据库及目标数据库需要表结构一致 using System; using System.Windows.Forms; using MySql.Data.MySqlClient; using System.Data.SqlClient; namespace MysqlToSQL { public partial class Form1 : Form { private static string mysqlConnString "…

【开源】基于Vue.js的学生日常行为评分管理系统的设计和实现

项目编号: S 010 ,文末获取源码。 \color{red}{项目编号:S010,文末获取源码。} 项目编号:S010,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2.1 登录注册模块2.2…

系列五、GC垃圾回收【四大垃圾算法-复制算法】

一、堆的内存组成 二、复制算法 2.1、发生位置 复制算法主要发生在新生代,发生在新生代的垃圾回收也被叫做Minor GC。 2.2、 Minor GC的过程 复制>清空》交换 1、eden、from区中的对象复制到to区,年龄1 首先,当eden区满的时候会触发第一…

基于IDEA进行Maven工程构建

Java全能学习面试指南:https://javaxiaobear.cn 1. 构建概念和构建过程 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中…

BlockCanary

卡顿检测框架,比如Activity Service ,BroadcastResoleve等,或者有延时执行造成卡顿 针对这些情况进行监控 引用: 初始化: 捕获异常结果: 源码: 使用双重锁的单例模式,enable 跳转到通知 主线程的监视器 Loop循环调用消息 根据dispathMessage判断是否造成卡顿,也就是消息的间…

python 导入工作目录的兄弟目录的模块

- 方法一:在工作目录和兄弟目录中都创建一个空文件 __init__.py,这样可以将它们变成Python包,然后在工作目录中使用相对路径导入兄弟目录的模块,例如 from ..brother import module。 - 方法二:在工作目录中使用 sys.p…

深入理解TensorFlow:计算图的重要性与应用

TensorFlow是一个流行而强大的机器学习框架,其核心概念之一是计算图(computation graph)。计算图在TensorFlow中扮演着重要角色,作为一种数据流图表示形式,它能够将计算的过程可视化,同时方便优化、分布式计…

【双十二预售】9.9元就能学《人工智能导论》!打卡赢红包,还有B站大会员等你领

双十二买什么最划算?那当然是知识!知识是永存的!是无价的! Mo 平台活动力度拉满!!! 原价 199.9 元的浙江大学《人工智能导论》课程 现在只要 9.9 元!!! 参…

Draft-P802.11be-D3.2协议学习__$36-EHT-PHY__$36.5-Parameters-for-EHT-MCSs

Draft-P802.11be-D3.2协议学习__$36-EHT-PHY__$36.5-Parameters-for-EHT-MCSs 36.3.5 EHT DUP transmission36.3.8 EHT modulation and coding schemes (EHT-MCSs)36.3.9 EHT-SIG modulation and coding schemes (EHT-SIG-MCSs)36.5 Parameters for EHT-MCSs36.5.1 EHT-MCSs fo…

K8s 命令行

前言:关于k8s 与 docker Docker和Kubernetes(通常简称为K8s)是两个在容器化应用程序方面非常流行的开源工具。 Docker: Docker 是一种轻量级的容器化平台,允许开发者将应用程序及其所有依赖项打包到一个称为容器的可移植容器中…

学习笔记5——对象、直接内存、执行引擎,string

学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/contents/3/192486.html 创建对象的步骤 对象对应的类是否被加载,链接(链接到真实的内存地址),初始化(类初始化)…

2023 年 数维杯(B题)国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2021年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看数维杯(B题)! …

【softmax和sidmod 快速学习和 用法对比】

Softmax函数和Sigmoid函数(也称为Logistic函数)在某些方面有相似之处,但它们在使用和适用场景上有一些不同。 首先,Sigmoid函数适用于二分类问题,将模型输出映射到0和1之间的概率值,表示样本属于正类的概率…

Git面经

Git八股文 第一章 git基础 1.1 什么是git git是一款免费的开源的分布式版本控制系统 1.2 为什么要使用git 为了保留之前的所有版本,方便回滚或修改 1.3 集中化版本控制系统和分布式版本控制系统的区别 集中化版本控制系统如svn,客户端连接到中央服…

RedHat公司及红帽认证介绍丨红帽认证等级介绍

RedHat公司及红帽认证介绍 红帽公司成立工1993年,是全球首家收入超10亿美元的开源公司,总部位于美国,分支机构遍布全球。红帽公司作头全球领先的开源和Linux系统提供商,其产品已被业界广泛认可并使用,尤其是RHEL系统在…

AD教程 (十七)3D模型的创建和导入

AD教程 (十七)3D模型的创建和导入 对于设计者来讲,现在3DPCB比较流行,3DPCB,除了美观之外,做3D的最终的一个目的,是为了去核对结构,就是我们去做了这么一个PCB之后,如果说…

033、微调

之——高级炼丹术 目录 之——高级炼丹术 杂谈 正文 1.标注数据集是很贵的 2.微调的思想 3.尝试 小结 杂谈 微调(Fine-tuning)是深度学习中的一种常见策略,它通常用于预训练模型在特定任务上的性能提升。微调的过程涉及在一个已经在大…

构建自定义ChatGPT,微软推出Copilot Studio

11月16日,微软在美国西雅图举办“Microsoft Ignite 2023”全球开发者大会。本次人工智能成为重要主题,微软几乎把所有产品都集成了生成式AI功能并发布了一系列全新产品。 其中,微软重磅推出了Copilot Studio(预览版)&…