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