tr用作替换命令
创建一个测试文件,把bilberry替换成banana,
并操作一次字节对等替换,得到如下结果:
[root@wangjian ~]# cat test03.txt
bilberry
banana
blackberry
bread
[root@wangjian ~]# tr "bilberry" "banana" < test03.txt
aananaaa
aanana
anackanaaa
aanad
[root@wangjian ~]# echo "789" | tr "789" "cfd"
cfd
1)对等的替换(一对一的替换)
789分别对应替换成cfd
bilberry 替换成 banana ,原理:字母对字母的替换(替换标准)
b > b (a是最终结果)
i > a
l > n
b > a
e > n
r > a
r
y
bilberry时有2个b词汇重复,以后面对应的替换为准。第一次b替换成b,第二次替换成a,因此所有的b都对应的是a
2)多对少的替换
再将bilberry 替换成bababa 做一次详细的分解(这个命令中字母对字母替换的标准)
|
替换前 | 替换后 |
---|---|
b | a |
i | a |
l | n |
b | a |
e | n |
r | a |
r | a |
y | a |
r y 空余 ,没有对应的替换时,多出来的字母对应替换成目标单词的最后一个字母 。因此r y 替换成 a
因此将bilberry替换成 banana ,得到的结果就是 aananaaa
再将第二个单词banana做替换(n,a分别没有对应可替换对字母,所以做保留)
替换前 | 替换后 |
---|---|
b | a |
a | a |
n | a |
a | a |
n | n |
a | a |
得到结果:aaaana
再将第三个字母blackberry做替换
替换前 | 替换后 |
---|---|
b | a |
l | n |
a | a |
c | c |
k | k |
b | a |
e | n |
r | n |
r | n |
y | n |
3)少对多的替换(保留没有可替换的字母)
再将第四个单词bread做替换
替换前 | 替换后 |
---|---|
b | a |
r | a |
e | n |
a | a |
d | d |
a d 没有对应的替换字母做保留
得到结果是 aanad
总结:tr 替换 形式上理解单词对单词的替换
结果是字母对字母的替换
主要要点:
1)目标字符对等时 ,一对一做替换(无重复字母)
2)目标a替换成目标b ,a字符多于b, a后面无可对应替换字母全部替换成b最后面一个字母
3)目标a替换成目标b,a字符少于b a后面无可对应替换全部保留
4) 目标a里有重复字母时 以重复的最后一个字母为标准