tr
traduz uma string em caracteres. Ele pesquisa as letras do primeiro conjunto e as substitui por aquelas do segundo conjunto.
Você tinha nik-pc
como primeiro conjunto. tr
expande a parte k-p
para todas as letras no intervalo de "k" para "p", então o conjunto é igual a niklmnopc
.
Seu segundo conjunto foi root
.
O que o tr
faz agora é pesquisar todas as ocorrências do primeiro caractere no primeiro conjunto (avaliado) e substituí-las pelo primeiro caractere do segundo conjunto. Quando não há mais caractere no conjunto 2, ele simplesmente repete seu último caractere. Veja a tabela abaixo:
n --> r
i --> o
k --> o
l --> t
m --> t
n --> t
o --> t
p --> t
c --> t
Então, agora está claro o porquê "Desktop" torna-se "Desottt". O comportamento é totalmente correto e destinado desta forma.
O que você procura pode ser obtido usando sed
:
sed 's/nik-pc/root/g' ma.txt
A sintaxe é esta:
sed 's/SEARCH_PATTERN/REPLACE_STRING/FLAGS' INPUT_FILE
Então deixamos pesquisar pelo padrão "nik-pc" e substituímos a correspondência inteira por "root". Precisamos adicionar o sinalizador "g" para ativar a substituição global. Sem isso, apenas substituiria cada primeiro jogo por linha.