我尝试用tr
它来替换文件中的变量名,但我注意到一些我无法确定变量是否有重复字符的行为。
例如:
echo "aab" | tr 'aab' 'xyz'
当我期待 xyz 时,给出结果 'yyz'。
谁能解释这里发生了什么?
我知道我可以使用其他命令sed
来实现我想要的结果,但我很想知道tr
这种情况在做什么。我查看了手册页并没有找到任何其他解释为什么会发生这种情况。谢谢
我尝试用tr
它来替换文件中的变量名,但我注意到一些我无法确定变量是否有重复字符的行为。
例如:
echo "aab" | tr 'aab' 'xyz'
当我期待 xyz 时,给出结果 'yyz'。
谁能解释这里发生了什么?
我知道我可以使用其他命令sed
来实现我想要的结果,但我很想知道tr
这种情况在做什么。我查看了手册页并没有找到任何其他解释为什么会发生这种情况。谢谢
tr
处理单个字符,而不是字符串。它的参数是字符集,构成一对一的映射:意思是“
a
用x
、a
用y
、b
用代替z
”。将两个集合放在另一个之上可能会有所帮助:如果第二组比第一组短,则通过重复最后一个字符来扩展它(默认情况下)。集合是按顺序阅读的,而不是按顺序应用的;所以上面的“
a
→y
”替换删除了之前定义的“a
→ ”替换。x