Tentei usar tr
para substituir um nome de variável em um arquivo e notei alguns comportamentos que não consigo descobrir se a variável tiver um caractere repetido.
Por exemplo:
echo "aab" | tr 'aab' 'xyz'
dá o resultado 'yyz' quando eu esperava xyz.
Alguém pode explicar o que está acontecendo aqui?
Estou ciente de que posso usar outros comandos semelhantes sed
para obter o resultado que desejo, mas estou curioso para entender o que tr
está acontecendo nessa situação. Eu olhei para a página do manual e não encontrei nenhuma outra explicação de por que isso aconteceria. Obrigado
tr
processa caracteres individuais, não cadeias de caracteres. Seus argumentos são conjuntos de caracteres, constituindo um mapeamento um-para-um:significa “substituir
a
porx
,a
pory
,b
porz
”. Pode ser útil visualizar os dois conjuntos um acima do outro:Se o segundo conjunto for mais curto que o primeiro, ele será estendido repetindo o último caractere (por padrão). Os conjuntos são lidos em ordem, não aplicados em ordem; então a substituição “
a
→y
” acima apaga a substituição “a
→x
” definida anteriormente.