012.tr

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.mfbz.cn/a/156705.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ADI 阻抗测量开发板AD5940调试

硬件环境: 评估板A,阻抗测试板 EVAL-AD5940BIOZ,阻抗测试板信息链接如下: https://wiki.analog.com/resources/eval/user-guides/eval-ad5940/hardware/eval-ad5940bioz 评估板B,MCU控制板 EVAL-ADICUP3029,控制板信息链接如下…

【python】——控制语句和组合数据类型(其二)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

鸿蒙OS应用开发初体验

什么是HarmonyOS? HarmonyOS(鸿蒙操作系统)是华为公司开发的一款基于微内核的分布式操作系统。它是一个面向物联网(IoT)时代的全场景操作系统,旨在为各种类型的设备提供统一的操作系统平台和开发框架。Har…

docker删除镜像命令

在Docker中删除镜像的命令是 docker rmi。这个命令用于删除一个或多个Docker镜像。使用这个命令时,你需要指定要删除的镜像的ID或名称。以下是一些常用的用法: 删除单个镜像: docker rmi [IMAGE_ID或REPOSITORY:TAG]例如,如果你知…

最大似然估计的介绍

最大似然估计(Maximum Likelihood Estimation,简称MLE)是一种用于估计概率分布中参数的方法。该方法的核心思想是选择使得观察到的数据在给定模型下出现的概率最大的参数值作为估计值。 最大似然估计具有很好的性质,包括渐进正态性…

LTE信令流程及业务流程

1、Attach过程 完成完成鉴权、身份验证、用户注册以外,包含默认承载的建立 1)在LTE网络中,PDN连接是默认承载的建立,它是在EPS承载中建立的,主要用于在UE和PDN之间传输数据。 2)在建立PDN连接时,会通过EPS隧道连接到PD…

Windows10安装麒麟桌面V10双系统

概述 想要在Windows10操作系统中安装麒麟V10的桌面操作系统(Kylin-Desktop-V10-Professional-Release-Build1-210203-X86_64) 安装前准备 1、先搞清楚自己的电脑类型 A MBR传统bios单硬盘 B MBR 传统bios双硬盘(SSD固态硬盘机械硬盘&…

atsec at the PCI Community Meeting 2023

atsec participated in the PCI (Payment Card Industry) Security Standards Council 2023 Asia-Pacific Community Meeting held in Kuala Lumpur, Malaysia, on 15 and 16 November and hosted a booth. atsec’s principal consultant Di Li provided a presentation on “…

OceanMind海睿思数据中台迎来重磅更新,使用体验全面提升!

为了帮助客户拥有更好的产品使用体验,帮助实施数据治理项目降本增效,OceanMind海睿思的迭代更新从未止步。 OceanMind数据中台再度迎来重磅更新,该版本在大数据方面进行了规划设计,吸纳了30来自于项目的实际需求,更贴…

openldap-sasl身份认证镜像

背景 在这篇文章中,AD域信息同步至openLDAP我们使用了SASL将身份验证从OpenLDAP委托给AD”这种方案,本文主要来构建此方案的docker镜像。 sasl官网:Cyrus SASL bitnami/openldap镜像地址:containers/Dockerfile bitnami/openl…

React升级到18版本

前言 升级前react版本是16.9.0,react-dom版本为16.9.0,react-router-dom为5.1.2版本。 安装 // npm npm install react react-dom// yarn yarn add react react-dom// pnpm pnpm install react react-dom启动项目 此时,项目可以正常运行&…

计算机领域十大天神

✍️作者简介:沫小北/码农小北(专注于Android、Web、TCP/IP等技术方向) 🐳博客主页:沫小北/码农小北 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请&…

CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

【导师不教?我来教!】同济计算机博士半小时就教会了我五大深度神经网络,CNN/RNN/GAN/transformer/LSTM一次学会,简直不要太强!_哔哩哔哩_bilibili了解的五大神经网络,整理笔记如下: 视频是唐宇…

git的简单使用

git 的简单使用 前言: 为了方便理解,文中一些内容表达的不是十分准确,如有错误,欢迎大家友善的指出。 接下来就开始了!! 使用git其实就是围绕下面这个图展开的,大家可以先看下图&#xff0c…

到站上海!见证这座零碳园区的绿色低碳新选择

不知不觉中,科士达新能源的零碳足迹已遍布五洲四海,为全球各地,千行百业、千家万户,带去了源源不断的绿色能源和低碳新选择。再次启航,这一站,抵达上海世博园。 小机身,大配置,灵活适…

【开源】基于Vue.js的社区买菜系统的设计和实现

项目编号: S 011 ,文末获取源码。 \color{red}{项目编号:S011,文末获取源码。} 项目编号:S011,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1…

Pandas 将DataFrame中单元格内的字典dict拆分成单独的列

核心是应用 pd.Series, 具体操作如下: import pandas as pddata {years: [2025],week: [{f"week_{i}": i for i in range(3)}]} df pd.DataFrame(data) print(df)df pd.concat([df, df[week].apply(pd.Series)], axis1).drop(week, axis1)…

java学习part03基本类型

22-变量与运算符-标识符的使用_哔哩哔哩_bilibili 1.标识符(变量)命名规则 2.变量类型 3.整型 4.浮点型 5.char字符 6.布尔boolean 7.基本类型的自动提升 8.强制转换 9.String String只能连接 会把其他类型的表面量转成字符串比如"true" &…

C++--第一个代码hello world

本篇开启C之旅... 先上代码&#xff1a; #include<iostream> using namespace std; int main() {cout << "hello world\n";return 0; }一. #include <iostream> 类比C语言中的#include<stdio.h>, #include <iostream>也是预处理指令…

喜讯 客户工艺线顺利通线

带你了解CiMEMS微纳制造工艺线 随着国内智能网联汽车、智能终端、可穿戴设备与消费电子的高速发展&#xff0c;以集成微纳系统&#xff08;Micro-electro-mechanical Systems&#xff0c;MEMS&#xff09;为代表的主要应用于激光雷达、汽车电子、环境感知与智能传感器的芯片&a…
最新文章