tr transform and replace
tr transform and replace
Linux tr 命令用于转换或删除文件中的字符。tr
指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。tr
命令是把字符串或者字符集拆成一个个字符来处理的,没有单词的概念。
|
|
-
-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
指令貌似无法直接读取文件,只能通过管道从标准输入传入文件