Usando tr para substituir texto por caracteres repetidos

0

Eu tentei usar tr para substituir um nome de variável em um arquivo, e notei um comportamento que não consigo descobrir se a variável tem 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 como sed para alcançar o resultado desejado, mas estou curioso para entender o que o tr está fazendo é essa situação. Eu olhei para a página do manual e não encontrei nenhuma outra explicação de por que isso aconteceria. Obrigado

    
por spectrum 25.05.2018 / 17:53

1 resposta

6

tr processa caracteres individuais, não sequências de caracteres. Seus argumentos são conjuntos de caracteres, constituindo um mapeamento um-para-um:

tr aab xyz

significa "substitua a por x , a por y , b por z ". Pode ajudar a ver os dois conjuntos um acima do outro:

tr aab \
   xyz

Se o segundo conjunto for menor que o primeiro, ele será estendido pela repetição do último caractere (por padrão). Os conjuntos são lidos em ordem, não aplicados em ordem; Portanto, a substituição " ay " acima apaga a substituição " ax " definida anteriormente.

    
por 25.05.2018 / 17:56