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