tr transform and replace

tr transform and replace

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

tr [-cdst] [第一字符集][第二字符集]  
tr [OPTION]…SET1[SET2]

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

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

例如:

[: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 指令貌似无法直接读取文件,只能通过管道从标准输入传入文件