tr transform and replace

警告
本文最后更新于 2023-10-22,文中内容可能已过时。

tr transform and replace

Linux tr 命令用于转换或删除文件中的字符tr指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。tr命令是把字符串或者字符集拆成一个个字符来处理的,没有单词的概念

1
2
tr [-cdst] [第一字符集][第二字符集]  
tr [OPTION]…SET1[SET2]
  • -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换

  • -d, --delete:删除指令字符

  • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符

  • -t, --truncate-set1:SET1 和 SET2 长度不一致的时候,削减 SET1 指定范围,使之与 SET2 设定长度相等

tr 命令最主要的是字符集的概念,这里举常用的几个

  • \\ 反斜杠 eg: cat testtr.txt |tr ‘\\’ 1

  • \n 换行符 eg: cat testtr.txt |tr '\n' 1

  • \t tab 符号 eg: cat testtr.txt |tr '\t' 1

CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。eg: cat testtr.txt |tr a-z A-Z 把所有的小写字母都抓换成大写,

  • [:alnum:] :所有字母字符与数字

  • [:alpha:] :所有字母字符

  • [:blank:] :所有水平空格

  • [:cntrl:] :所有控制字符

  • [:digit:] :所有数字

  • [:graph:] :所有可打印的字符 (不包含空格符)

  • [:lower:] :所有小写字母

  • [:print:] :所有可打印的字符 (包含空格符)

  • [:punct:] :所有标点字符

  • [:space:] :所有水平与垂直空格符

  • [:upper:] :所有大写字母

  • [:xdigit:] :所有 16 进位制的数字

例如:

[:lower:][:upper:]也可以实现小写转大写 cat testtr.txt |tr [:lower:] [:upper:]

当然你可以自己手动写字符集,然后替换

cat testtr.txt |tr '0123' '4567':会把 0 换成 4,1 换成 5,2 换成 6,3 换成 7

替换的逻辑是这样的:

首先替换 SET1 中的第一个字符,从 SET2 的第一个位置往后找,找到第一个拿来进行替换,然后是 SET1 的第二个字符,总之就是在 SET2 中取对应的位置的字符进行替换,如果长度不够,就取 SET2 的最后一个字符。你也可以指定-t参数,削减 SET1 指定范围,使之与 SET2 设定长度相等

cat testtr.txt |tr '1234' 'ab':会把 1 换成 a,把 234 全部换成 b

cat testtr.txt |tr -t '1234' 'ab':只会替换 12,会把 1 换成 a,把 2 换成 b

cat testtr.txt |tr ' ' 'abcd':只会把空格替换为 a

删除功能

cat testtr.txt | tr -d 'boot'匹配文件中的字符 b,字符 o,字符 t,然后删除,而不是匹配整个“boot”字符串


tr指令貌似无法直接读取文件,只能通过管道从标准输入传入文件

0%