【busybox记录】【shell指令】tr

目录

内容来源:

【GUN】【tr】指令介绍

【busybox】【tr】指令介绍

【linux】【tr】指令介绍

使用示例:

转换字符 - 默认

转换字符 - 不翻译指定字符数组

此指令目前接触少,用得少,把精力放到其他常用指令上

常用组合指令:

指令不常用/组合用法还需继续挖掘:


内容来源:

        GUN : Coreutils - GNU core utilities

        busybox v1.36.1 : 【busybox记录】【shell指令】基于的Busybox的版本和下载方式-CSDN博客

【GUN】【tr】指令介绍

tr:翻译、压缩和/或删除字符
简介:tr [option]... string1 [string2]tr 执行下列操作之一,将标准输入复制到标准输出。翻译,并可选择压缩结果中重复的字符,挤压重复的字符,删除字符,删除字符,然后从结果中挤出重复的字符。操作数string1和string2定义了字符数组array1和array2。默认情况下,array1列出tr操作的输入字符,array2列出相应的翻译。在某些情况下,第二个操作数会被省略。该程序接受以下选项。参见第2章[常见选项],第2页。
选项必须在操作数之前。
‘-c’
‘-C’
‘--complement’使用它的补码(string1没有指定的所有字符),并按升序排列,而不是array1。在多字节语言环境中使用此选项时要谨慎,因为其含义并不总是明确或可移植。参见第9.1.1节[字符数组],第82页。
‘-d’
‘--delete’删除array1中的字符;不要翻译。
‘-s’
‘--squeeze-repeats’将最后一个指定数组中列出的重复字符的每个序列替换为该字符的一次出现。
‘-t’
‘--truncate-set1’将array1的长度截断为array2的长度。
退出状态为零表示成功,非零值表示失败。
9.1.1指定字符数组虽然string1和string2操作数看起来很相似,但它们不是正则表达式。相反,它们只是表示字符数组。作为POSIX的GNU扩展,空字符串操作数表示空字符数组。string1和string2的解释取决于语言环境。GNU tr完全只支持安全的单字节语言环境,其中每个可能的输入字节表示一个字符。不幸的是,这意味着GNU tr不会以您所期望的方式处理类似`tr¨o Ł`这样的命令,因为(假设是UTF-8编码)这等价于`tr '\303\266' '\305\201'`,并且GNU tr将简单地将所有的`\303`字节转换为`\305`字节,等等。POSIX没有明确指定tr在某些区域中的行为,这些区域中的字符使用字节序列而不是单个字节表示,或者数据可能包含编码错误的无效字节。为了避免这方面的问题,您可以使用类似于`LC_ALL=C tr`的shell命令而不是普通的tr,在安全的单字节区域设置中运行tr。尽管大多数字符只是简单地用string1和string2表示自己,但为了方便,这些字符串也可以包含下面列出的简写。有些简写只能在string1或string2中使用,如下所述。反斜杠转义可以识别下列反斜杠转义序列:‘\a’ Bell (BEL, Control-G).‘\b’ Backspace (BS, Control-H).‘\f’ Form feed (FF, Control-L).‘\n’ Newline (LF, Control-J).‘\r’ Carriage return (CR, Control-M).‘\t’ Tab (HT, Control-I).‘\v’ Vertical tab (VT, Control-K).‘\ooo’ 值为ooo的8位字节,它是反斜杠之后1到3个八进制数字的最长序列。为了可移植性,ooo应该表示一个能装进8位的值。作为POSIX的GNU扩展,如果值不能容纳,则只使用ooo的前两位数字,例如,' \400 '等同于' \0400 ',表示两个字节的序列。‘\\’ 一个反斜杠。如果未转义的反斜杠后面没有字符,则为错误。作为一个GNU扩展,反斜杠后跟一个未在上面列出的字符会被解释为该字符,删除任何特殊意义;这可以用于转义字符'['和'-',当它们是特殊字符时。范围符号'm-n'按升序扩展到从m到n的字符。m不应排在n之后;如果是,就会导致错误。例如,`0-9`等同于`0123456789`。GNU tr不支持使用方括号将范围括起来的System V语法。这种格式指定的翻译有时会按预期工作,因为括号经常被音译为它们自己。但是,应该避免使用它们,因为它们有时表现得出乎意料。例如,`tr -d '[0-9]'`会同时删除括号和数字。许多历史上常见的甚至是被接受的范围的使用都不是完全可移植的。例如,在EBCDIC主机上使用`A-Z`范围将不会实现大多数人所期望的效果,因为`A`到`Z`在ASCII中是不连续的。解决这个问题的一种方法是使用字符组(见下文)。否则,枚举范围的成员是最可移植的(也是最难看的)方式。重复字符string2中的表示法'[c*n]'扩展为字符c的n个副本。因此,'[y*6]'与'yyyyyy'相同。string2中的'[c*]'表示法可以扩展为使array2和array1一样长的c的副本。如果n以'0'开头,则以八进制解释,否则以十进制解释。0值的n被视为不存在。字符类符号`[:class:]`扩展到(预定义的)类class中的所有字符。当同时提供--delete (-d)和--squeeze-repeats (-s)选项时,可以在string2中使用任何字符类。否则,string2只接受lower和upper字符组,而且只有在string1中相同的相对位置指定了对应的字符组(upper和lower)时才接受。这样做指定了大小写转换。除了大小写转换之外,类中的字符没有特定的顺序。类名如下。当类名无效时,将导致错误。alnum  字母和数字。alpha  字母。blank  水平空白。cntrl  控制字符。digit  位数。graph  可打印字符,不包括空格。lower  小写字母。print  可打印字符,包括空格。punct  常用的标点符号。space  水平或垂直空白。upper  大写字母。xdigit 十六进制数字。等价类语法`[=c=]`展开为与c相等的所有字符,没有特定的顺序。只有同时给出--delete (-d)和--squeeze-repeats -s时,string2中才允许使用这些等价类。虽然等价类旨在支持非英语字母,但似乎没有标准的方法来定义它们或确定它们的内容。因此,它们在GNU tr中没有完全实现。每个字符的等价类只包含该字符,没有特殊用途。9.1.2转换当string1和string2都给定且没有指定--delete (-d)选项时,tr将执行转换。tr将其输入中array1中的每个字符转换为array2中的相应字符。不在array1中的字符会原原不动地传递。作为POSIX的GNU扩展,当一个字符在array1中出现多次时,只使用最后一个实例。例如,下面两个命令是等价的:tr aaa xyztr a ztr的一个常见用途是将小写字符转换为大写字符。这可以通过多种方式实现。下面是其中的三个:tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZtr a-z A-Ztr '[:lower:]' '[:upper:]'但是,像a-z这样的范围在C语言环境之外是不可移植的。在tr执行转换时,array1和array2通常具有相同的长度。如果array1比array2短,则忽略array2末尾的额外字符。另一方面,让array1比array2长是不可移植的;POSIX表示结果未定义。在这种情况下,BSD tr根据需要多次重复array2的最后一个字符,从而将array2补全到array1的长度。System V tr将array1截断为array2的长度。默认情况下,GNU tr像BSD tr一样处理这种情况。当给出--truncte -set1 (-t)选项时,GNU tr会像System V tr一样处理这种情况。对于除转换之外的操作,该选项将被忽略。在这种情况下,类似于System V tr的做法打破了相对常见的BSD惯用法:tr -cs A-Za-z0-9 '\012'因为它只将0字节(array1补码中的第一个元素)转换为换行符,而不是将所有非字母数字转换为换行符。顺便说一下,上面的用法是不可移植的,因为它使用了范围,而且它假定newline的八进制代码为012。下面是一种更好的写法:tr -cs '[:alnum:]' '[\n*]'
9.1.3压缩重复和删除如果只提供--delete (-d)选项,tr会删除array1中的所有输入字符。当只给出--squeeze-repeats (-s)选项而不进行translate时,tr将array1中重复字符的每个输入序列替换为该字符的一次出现。当同时给出--delete和--squeeze-repeats时,tr首先使用array1执行任何删除操作,然后使用array2从任何剩余字符中挤压重复。翻译时也可以使用--squeeze-repeats选项,在这种情况下,tr首先执行翻译,然后使用array2从任何剩余字符中挤压重复。下面是一些示例来说明各种选项组合:删除所有0字节:tr -d '\0'将所有单词单独连成一行。该函数将所有非字母数字字符转换为换行符,然后将每个包含重复换行符的字符串压缩为一个换行符:tr -cs '[:alnum:]' '[\n*]'将每个重复的换行符序列转换为一个换行符。例如,删除空行:tr -s '\n'查找文档中出现重复的单词。例如,人们经常写“the the”,重复的单词之间用换行符分隔。下面的Bourne shell脚本首先将每个标点符号和空白字符序列转换为一个换行符。这会将每个“单词”单独放在一行上。接下来,它将所有大写字符映射为小写,最后使用-d选项运行uniq,只打印出重复的单词。#!/bin/shcat -- "$@" \| tr -s '[:punct:][:blank:]' '[\n*]' \| tr '[:upper:]' '[:lower:]' \| uniq -d删除一小部分字符通常很简单。例如,要删除所有的`a`、`x`和`M`,你可以这样做:tr -d axM然而,当`-`是这些字符之一时,它可能会很棘手,因为`-`有特殊的含义。执行与上面相同的任务,但同时删除所有的`-`字符,我们可以尝试tr -d -axm,但这会失败,因为tr会尝试将-a解释为命令行选项。或者,我们可以尝试在字符串中放入连字符tr -d a-xm,但这也不起作用,因为这会让tr将a-x解释为字符范围'a'…'x',而不是三个字符。解决这个问题的一种方法是把连字符放在字符列表的末尾:tr -d axM-或者你可以使用`--`来终止选项处理:tr -d -- -axM

【busybox】【tr】指令介绍

【linux】【tr】指令介绍

[root@localhost bin]# tr --help
用法:tr [选项]... SET1 [SET2]
Translate, squeeze, and/or delete characters from standard input,
writing to standard output.-c, -C, --complement    use the complement of SET1-d, --delete            delete characters in SET1, do not translate-s, --squeeze-repeats   replace each sequence of a repeated characterthat is listed in the last specified SET,with a single occurrence of that character-t, --truncate-set1     first truncate SET1 to length of 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:]	所有的十六进制数[=字符=]	所有和指定字符相等的字符Translation occurs if -d is not given and both SET1 and SET2 appear.
-t may be used only when translating.  SET2 is extended to length of
SET1 by repeating its last character as necessary.  Excess characters
of SET2 are ignored.  Only [:lower:] and [:upper:] are guaranteed to
expand in ascending order; used in SET2 while translating, they may
only be used in pairs to specify case conversion.  -s uses the last
specified SET, and occurs after translation or deletion.GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 tr 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/tr>
或者在本地使用:info '(coreutils) tr invocation'

使用示例:

转换字符 - 默认

把1-9转化成a-g,不足的以末尾字符为准

指令: tr 1-9 a-g

转换字符 - 不翻译指定字符数组

-d 选项

示例: 不翻译abc

指令: tr -d  abc

此指令目前接触少,用得少,把精力放到其他常用指令上

NA

常用组合指令:

NA

指令不常用/组合用法还需继续挖掘:

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

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

相关文章

flutter安卓项目生成MD5、sha1、公钥等

一&#xff1a;MD5、SHA1等生成方式 工具&#xff1a;Android Studio 1. 打开flutter项目下的Android目录 2. 创建signingReport运行配置项 3. build apk&#xff1a; 导航栏->build->Generate Signed App Bundle / APK... 4. 填写存放路径&#xff0c;同时创建文件xx…

基于CLAHE算法的图像增强及评价

摘要&#xff1a; 本研究旨在探讨对比度限制自适应直方图均衡化&#xff08;CLAHE&#xff09;算法在数字图像处理中的应用。CLAHE算法通过在局部区域内进行直方图均衡化&#xff0c;有效地增强了图像的对比度&#xff0c;并在保持图像细节的同时避免了过度增强的问题。本文通过…

压力测试-JMeter常用插件、服务器硬件监控

1.写在前面 在前一篇文章中&#xff0c;我们已经对jmeter有了一个入门的学习。 掌握了JMeter安装、入门、结果分析等内容&#xff0c;详情可查看这里&#xff1a;压力测试-JMeter安装、入门、结果分析 对于jmeter默认的插件&#xff0c;往往不太够&#xff0c;例如&#xff…

【自动驾驶|毫米波雷达】初识毫米波雷达射频前端硬件

第一次更新&#xff1a;2024/5/4 目录 整体概述 混频器&#xff08;MIXER&#xff09; 低通滤波器&#xff08;LPF&#xff1a;Low-Pass filter&#xff09; 数模转换器&#xff08;ADC&#xff1a;Analog to Digital Converter&#xff09; 毫米波雷达功能框图 整体概述 完…

Spring Data JPA自定义Id生成策略、复合主键配置、Auditing使用

前言 在Spring Data JPA系列的第一篇文章 SpringBoot集成JPA及基本使用-CSDN博客 中讲解了实体类的Id生成策略可以通过GeneratedValue注解进行配置&#xff0c;该注解的strategy为GenerationType类型&#xff0c;GenerationType为枚举类&#xff0c;支持四种Id的生成策略&…

java-springboot项目添加swagger2/Knife4j,附注解

文章目录 添加依赖config工作包中新增SwaggerConfig报错注解 环境&#xff1a; jdk1.8 java8 springboot2.6.13 swagger2.9.2 添加依赖 pom.xml <!-- 添加swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfo…

ChatGPT-Next-Web漏洞利用分析(CVE-2023-49785)

1. 漏洞介绍 ​ 日常网上冲浪&#xff0c;突然粗看以为是有关Chat-GPT的CVE披露出来了&#xff0c;但是仔细一看原来是ChatGPT-Next-Web的漏洞。漏洞描述大致如下&#xff1a;&#xff08;如果有自己搭建了还没更新的速速修复升级防止被人利用&#xff0c;2.11.3已经出来了&am…

代码训练LeetCode(17)存在重复元素

代码训练(17)LeetCode之存在重复元素 Author: Once Day Date: 2024年5月7日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 219. 存在重复元素 II - 力扣&#xff08;LeetCode&#xff09;力扣 (LeetCode) 全球…

【ElasticSearch】IK分词器中停用词问题

问题描述 在ES中进行部分关键词搜索时&#xff0c;搜索无结果&#xff0c;如搜索 【IT】 环境描述 中文分词插件 这里使用的是 analysis-ik 分词调试 POST test_index/_analyze {"text":"IT Manager","analyzer": "ik_max_word"…

Spring Security基础教程:从入门到实战

作者介绍&#xff1a;✌️大厂全栈码农|毕设实战开发&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 推荐订阅精彩专栏 &#x1f447;&#x1f3fb; 避免错过下次更新 Springboot项目精选实战案例 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c…

S型曲线的几种设计(图像对比度调节)

一般来讲&#xff0c;图像调色模块都会提供“曲线”工具&#xff0c;这是一个极其灵活的功能&#xff0c;绝大部分的调色都可以通过该工具实现&#xff0c;但是曲线功能的交互相对而言比较复杂。出于简便性和效率方面的考量&#xff0c;调色模块往往还会提供一些具有很强的功能…

初识C语言——第十四天

指针 总结&#xff1a;指针变量是用来干啥的呢&#xff0c;一是用来存放别人的地址的&#xff0c;指针是有类型的&#xff0c;这个类型是如何写的&#xff1b;二是当我有一天通过*(解引用符&#xff09;找到我所要找的对象&#xff0c;来操作所指向的对象。 #define _CRT_SECUR…

Three.js的几何形状

在创建物体的时候&#xff0c;需要传入两个参数&#xff0c;一个是几何形状【Geometry】&#xff0c;一个是材质【Material】 几何形状主要是存储一个物体的顶点信息&#xff0c;在Three中可以通过指定一些特征来创建几何形状&#xff0c;比如使用半径来创建一个球体。 立方体…

VS2022快捷键修改

VS2022快捷键修改 VS2022快捷键修改 VS2022快捷键修改

芸众商城电商专业版400+插件源码+搭建教程

介绍&#xff1a; 芸众商城社交电商系统SAAS平台前端基于vue开发&#xff0c;后端基于研发积分商城系统源码 php&#xff0c;本文安装芸众商城全插件&#xff08;400多个&#xff09;商业版平台源码&#xff0c;可同时支持多端口部署运行&#xff1b;使用宝塔面板一键部署的形…

2022 年全国职业院校技能大赛高职组云计算赛项试卷(私有云)

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包…

docker部署常用工具

1.创建mysql docker run -p 3306:3306 --name mysql -v /home/mysql/conf:/etc/mysql/mysql.conf.d -v /home/mysql/log:/var/log/ -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD2022qwer -d mysql:5.7 而后再执行升级&#xff1a; docker update --restar…

React中的高阶组件的封装,高阶函数,HOC的含义及用法:

含义及作用: 高阶函数代码案例: 调用高阶组价:

CP AUTOSAR之CANXL Driver详细说明(正在更新中)

本文遵循autosar标准&#xff1a;R22-11 1 简介及功能概述 本规范描述了AUTOSAR 基础软件模块CAN XL 驱动程序的功能、API和配置。   本文档的基础是[1,CiA610-1]和[2,CiA611-1]。假设读者熟悉这些规范。本文档不会再次描述CAN XL 功能。   CAN XL 驱动程序是最低层的一部…

算法提高之玉米田

算法提高之玉米田 核心思想&#xff1a;状态压缩dp 将图存入g数组 存的时候01交换一下方便后面判断即g数组中0为可以放的地方 state中1为放的地方 这样只要state为1 g为0就可以判断不合法 #include <iostream>#include <cstring>#include <algorithm>#includ…