{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2021-02-14 12:39:28","updateBy":"admin","updateTime":"2025-06-16 20:19:23","remark":null,"id":49,"articleTitle":"Shell（八）文本处理tr命令","articleUrl":"shell_tr","articleThumbnail":"https://www.asumimoe.com/imgfiles/20220908/7769fde9ec5445068e41583cb1c71894.jpg","articleFlag":"0","draftStatus":"1","reprintStatement":"1","articleSummary":"tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串：字符串1用于查询，字符串2用于处理各种转换。tr刚执行时，字符串1中的字符被映射到字符串2中的字符，然后转换操作开始。","articleContent":"## tr命令\n\ntr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串：字符串1用于查询，字符串2用于处理各种转换。tr刚执行时，字符串1中的字符被映射到字符串2中的字符，然后转换操作开始。\n\n通过使用 tr，您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的（极其）简化的变体：它可以用一个字符来替换另一个字符，或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。\n\n### 用法\n\n```bash\n[root@l1 ~]# tr --help\n用法：tr [选项]... SET1 [SET2]\n从标准输入中替换、缩减和/或删除字符，并将结果写到标准输出。\n\n  -c, -C, --complement\t\t首先补足SET1\n  -d, --delete\t\t\t删除匹配SET1 的内容，并不作替换\n  -s, --squeeze-repeats\t如果匹配于SET1 的字符在输入序列中存在连续的\n\t\t\t\t重复，在替换时会被统一缩为一个字符的长度\n  -t, --truncate-set1\t\t先将SET1 的长度截为和SET2 相等\n      --help\t\t显示此帮助信息并退出\n      --version\t\t显示版本信息并退出\n```\n\n### 字符集范围\n\n```bash\n# 以下说明来自tr --help输出\nSET 是一组字符串，一般都可按照字面含义理解。解析序列如下：\n\n  \\NNN\t八进制值为NNN 的字符(1 至3 个数位)\n  \\\\\t\t反斜杠\n  \\a\t\t终端鸣响\n  \\b\t\t退格\n  \\f\t\t换页\n  \\n\t\t换行\n  \\r\t\t回车\n  \\t\t\t水平制表符\n  \\v\t\t垂直制表符\n  字符1-字符2\t从字符1 到字符2 的升序递增过程中经历的所有字符\n  [字符*]\t在SET2 中适用，指定字符会被连续复制直到吻合设置1 的长度\n  [字符*次数]\t对字符执行指定次数的复制，若次数以 0 开头则被视为八进制数\n  [:alnum:]\t所有的字母和数字\n  [:alpha:]\t所有的字母\n  [:blank:]\t所有呈水平排列的空白字符\n  [:cntrl:]\t所有的控制字符\n  [:digit:]\t所有的数字\n  [:graph:]\t所有的可打印字符，不包括空格\n  [:lower:]\t所有的小写字母\n  [:print:]\t所有的可打印字符，包括空格\n  [:punct:]\t所有的标点字符\n  [:space:]\t所有呈水平或垂直排列的空白字符\n  [:upper:]\t所有的大写字母\n  [:xdigit:]\t所有的十六进制数\n  [=字符=]\t所有和指定字符相等的字符\n\n仅在SET1 和SET2 都给出，同时没有-d 选项的时候才会进行替换。\n仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式\n补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:] 和[:upper:]\n以升序展开字符；在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1，既不\n替换也不删除，否则在替换或展开后使用SET2 缩减。\n```\n\n## tr用法\n\n### 1.将文件中的\"abc\"替换为\"xyz\"\n\n```bash\n[root@l1 ~]# cat tr.txt \nabc\nabbc\nacd\n[root@l1 ~]# cat tr.txt | tr [abc] [xyz]\nxyz\nxyyz\nxzd\n```\n\n**注意：**这里的替换是将文本中出现的\"a\"替换为\"x\"，\"b\"替换为\"y\"，\"c\"替换为\"z\"，而不是将整体字符串\"abc\"替换为\"xyz\"。\n\n### 2.统一字母大小写\n\n```bash\n[root@l1 ~]# cat tr.txt | tr [a-z] [A-Z]\nABC\nABBC\nACD\n[root@l1 ~]# cat tr.txt | tr [:lower:] [:upper:]\nABC\nABBC\nACD\n```\n\n### 3.删除文件中的特定字符\n\n```bash\n[root@l1 ~]# cat tr.txt | tr -d \"abc\"\n\n\nd\n```\n\n**注意：**删除的是\"a\"，\"b\"，\"c\"三个字符，而不是整体。\n\n### 4.删除文件中的换行符\"\\n\"\n\n```bash\n[root@l1 ~]# cat tr.txt | tr -d \"\\n\"\nabcabbcacd # 多行文件就被合并为了一行\n```\n\n### 5.压缩字符\n\n比如删除文本中两个字母之间多余的空格\n\n```bash\n[root@l1 ~]# echo 'hello     world     !!' | tr -s \" \"\nhello world !!\n```\n\n### 6.删除空行\n\n```bash\n[root@l1 ~]# cat file | tr -s \"\\n\"\n```\n\n### 7.简单加密解密\n\n```bash\n[root@Gin scripts]# echo 12345|tr '0-9' '987654321'  ## 加密\n87654\n[root@Gin scripts]# echo 87654|tr '987654321' '0-9'  ## 解密\n12345\n```","categoryId":5,"viewCount":815,"categoryName":"Shell","author":"球接子","authorAvatar":null,"tagIds":[4,10],"tagNames":["Shell","Linux基础"]}}