使用 tr 替换重复字符的文本

spe*_*rum 1 text-processing tr

我尝试使用tr替换文件中的变量名,我注意到一些行为,我无法弄清楚变量是否有重复的字符。

例如:

echo "aab" | tr 'aab' 'xyz'
Run Code Online (Sandbox Code Playgroud)

当我期待 xyz 时给出结果 'yyz'。

谁能解释这里发生了什么?

我知道我可以使用其他命令sed来实现我想要的结果,但我很想知道tr这种情况在做什么。我查看了手册页并没有找到任何其他解释为什么会发生这种情况。谢谢

Ste*_*itt 7

tr处理单个字符,而不是字符串。它的参数是字符集,构成一对一的映射:

tr aab xyz
Run Code Online (Sandbox Code Playgroud)

意思是“代替axaybz”。将两组放在另一组之上可能会有所帮助:

tr aab \
   xyz
Run Code Online (Sandbox Code Playgroud)

如果第二组比第一组短,则通过重复最后一个字符来扩展它(默认情况下)。这些集合是按顺序读取的,而不是按顺序应用的;所以“ ay” 上面的替换删除了“ ax”之前定义的替换。