首页 > 系统相关 >Linux常用选项之tr命令详解

Linux常用选项之tr命令详解

时间:2024-12-25 16:29:34浏览次数:12  
标签:字符 删除 字符集 tr echo 详解 SET1 Linux

tr(translate)是Linux系统中一个非常实用的命令行工具,主要用于字符转换或删除操作。它从标准输入读取数据,执行指定的转换处理,并将结果输出到标准输出。tr 命令的主要功能包括但不限于大小写转换、删除特定字符、压缩重复字符等。

功能与特性

  • 字符替换:可以将一组字符替换成另一组字符。例如,将所有的小写字母转换成大写字母。
  • 字符删除:可以从输入流中删除指定的字符集。
  • 字符压缩:可以缩减连续重复出现的字符为单个字符。
  • 字符补集:能够处理不属于指定字符集的所有字符。
  • 支持正则表达式风格的字符类:如 [:lower:] 表示所有小写字母,[:digit:] 表示所有数字等,使得字符集定义更加灵活。

使用方法

命令格式
tr [选项] SET1 [SET2]
  • 选项:用于调整 tr 的行为,比如是否使用字符集的补集、是否删除字符等。
  • SET1SET2:分别是源字符集和目标字符集。当只提供了 SET1 时,通常意味着要删除这些字符;如果同时提供了 SET1SET2,则表示进行字符替换。
常用选项

以下是一些常用的 tr 选项及其功能:

  • -c--complement:对 SET1 取反,即处理不在 SET1 中的字符。
  • -d--delete:删除 SET1 中的所有字符。
  • -s--squeeze-repeats:把连续重复的字符压缩成单独一个字符。
  • -t--truncate-set1:当 SET1SET2 长时,截断 SET1 至与 SET2 等长。
示例

1. 替换字符

将所有小写字母转换为大写:

echo "hello world" | tr '[:lower:]' '[:upper:]'

这会输出 HELLO WORLD

2. 删除字符

移除字符串中所有的数字:

echo "abc123def456" | tr -d '0-9'

结果将是 abcdef

3. 压缩重复字符

将连续的空格压缩成一个空格:

echo "Hello    World" | tr -s ' '

输出将是 Hello World

4. 字符集之间的翻译

将英文字母从大写转换为小写,反之亦然:

echo "HeLlO wOrLd" | tr 'a-zA-Z' 'A-Za-z'

输出将会是 hElLo WoRlD

5. 转换特殊字符

将制表符转换为空格:

echo -e "hello\tworld" | tr '\t' ' '

结果将是 hello world

6. 互换两个字符的位置

交换文件内容中的逗号和分号:

tr ',' ';' < inputfile > outputfile

这里假设输入文件包含逗号,而想要将它们全部替换成分号。

7. 使用集合定义进行转换

使用POSIX字符类来替换非字母字符为下划线:

echo "Hello, World!" | tr -c '[:alpha:]' '_'

这会把除了字母以外的所有字符都替换为下划线,输出类似于 Hello__World_

8. 删除控制字符

删除不可打印的ASCII字符(如退格、铃声等):

cat file.txt | tr -cd '\11\12\15\40-\176'

这里 \11 是水平制表符(TAB),\12 是换页符,\15 是回车符(CR),\40-\176 是可打印的ASCII字符范围。

9. 删除空白行

从文件中删除所有空白行(只包含空格或制表符的行也会被删除):

tr -s '\n' < file.txt

此命令通过压缩换行符来实现这一点。

10. 创建密码

生成一个随机密码,长度为8个字符,包含大小写字母和数字:

</dev/urandom tr -dc 'A-Za-z0-9' | head -c8

这条命令首先从 /dev/urandom 中读取随机字节流,然后用 tr 筛选出所需的字符集,并限制输出长度。

11. 将多行合并为一行

将多个文本行合并为单个文本行,用空格分隔:

tr '\n' ' ' < multilinefile.txt

或者如果需要保留原始行尾的换行符,但仍然想将所有行合并到一行上,可以这样做:

tr '\n' '\r' < multilinefile.txt | tr '\r' ' '

12. 统计字符频率

统计给定文本中每个字符出现的次数(这是一个稍微复杂的例子,结合了其他命令):

echo "aaabbc" | tr -cd '[:alnum:]' | fold -w1 | sort | uniq -c | sort -nr

这段代码将过滤掉非字母数字字符,将每个字符单独放在一行上,排序并计算每个字符的数量,最后按降序排列结果。

标签:字符,删除,字符集,tr,echo,详解,SET1,Linux
From: https://blog.csdn.net/weixin_56303229/article/details/144652856

相关文章

  • 全面解析基数排序:定义、原理、复杂度、稳定性及实现步骤详解
    定义基数排序(RadixSort)是一种非比较型整数排序算法,它是根据数字的每一位来排序。它的基本思想是将整数按位数切割成不同的数字,然后按每个位数分别比较。对于有d位的整数,需要进行d趟排序。工作原理以最低有效位(Least-Significant-Digit,LSD)为例首先,考虑待排序的整数......
  • 『玩转Streamlit』--上传下载文件
    在Web应用中,文件的上传下载是交互中不可缺少的功能。因为在业务功能中,一般不会只有文字的交互,资料或图片的获取和分发是很常见的需求。比如,文件上传可让用户向服务器提交数据,如上传图片分享生活、提交文档用于工作协作等,丰富应用功能。而文件下载则使用户能获取服务器端的资源,......
  • 冒泡排序全攻略:概念、原理、复杂度与代码详解
    一、冒泡排序的基本概念冒泡排序(BubbleSort)是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢......
  • 详解选择排序:从概念到代码的完整指南
    一、选择排序的基本概念选择排序(SelectionSort)是一种简单的排序算法。它的基本思想是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。二、选择排序的过程......
  • CS61B srping 2018 lab03 https://sp18.datastructur.es/
    UnitTestingwithJUnit,Debugging准备装好CS61B插件(emmmmm,不装也没事)把lab2的IntList.java复制到lab3/IntList文件夹.看看关于测试的课程视频介绍啊?JUnit是java测试框架,现在要用JUnit进行单元测试,单元Unit就是把程序分成小块的单元,一个单元的功能尽量少,单独测试,......
  • 在Asp.netCore中使用Attribute来描述限流
    前言同事问我Asp.netCore的RateLimiting是怎么使用的,我回答说很简单的,你只要按照如下步骤来:在RateLimiterOptions上注册policy,记住policy对应的policyName在Web应用添加UseRateLimiter()中间件在api对应的Action上标注[EnableRateLimiting(policyName)]半小时后,同事说要对......
  • Go语言基础数据类型详解:整型、浮点型、复数与字符串
    Go语言基础数据类型详解:整型、浮点型、复数与字符串Go语言作为一门静态强类型的语言,其数据类型设计简洁而高效。掌握Go的基本数据类型是每个开发者深入理解Go语言的基础。本篇文章将详细介绍Go语言中最常见的基本数据类型,包括整型、浮点型、复数、布尔型、字符串等,并结合实例代码......
  • 最近刚刚整理的免费获取股票数据接口API(实时数据、历史数据、CDMA、KDJ等指标数据)配有
    以下所有接口,均可在浏览器中直接测试!沪深两市股票列表API接口链接(可点击验证):https://api.mairui.club/hslt/list/b997d4403688d5e66a【实时数据接口】沪深两市实时交易数据接口API接口链接(可点击验证):https://api.mairui.club/hsrl/ssjy/000001/b997d4403688d5e66a1、p......
  • Linux基础——固化系统路由
    一、临时添加路由(重启network服务失效)例:方法一:routeadd-net或者-hostgw网关deveth0说明:-net要添加标准子网掩码。-host要添加主机ip可以不写子网掩码。方法二:iprouteaddip或者网段viadeveth0查看路由表:参考文档:https://blog.csdn.net/yuyuyuliang00/article/detail......
  • 详解 NumPy:关键知识点梳理与实践应用指引
    一、NumPy简介NumPy(NumericalPython)是一个功能强大的Python库,主要用于对多维数组(ndarray)进行高效的操作。它是许多其他数据科学和机器学习库(如Scikit-learn、Pandas等)的基础。安装可以使用pipinstallnumpy命令在命令行中安装NumPy。如果使用Anaconda环境,NumPy通常已经预......