-s Switch: Squeeze (remova caracteres repetidos)
echo i am a good boy | tr -s good badoutput:
i am a bd bdy
Há duas coisas acontecendo nos bastidores que fazem isso acontecer. Em primeiro lugar, se o segundo argumento para tr for menor que o primeiro, então o último caractere no segundo argumento será repetido para torná-lo o mesmo comprimento que o primeiro. Então o comando equivalente é:
echo i am a good boy | tr -s good badd
A outra coisa que está acontecendo é quando os caracteres do primeiro argumento são repetidos sobrescrevem qualquer ocorrência anterior (estou me referindo aos dois oo s em good ). Isso faz com que o comando agora seja equivalente a:
echo i am a good boy | tr -s god bdd
(a segunda substituição o to d substitui a substituição o a a anterior, tornando-a redundante)
Sem a opção -s , a saída seria
i am a bddd bdy
Com o -s switch tr 'aperta' qualquer caractere repetido listado no primeiro argumento, deixando a saída final:
i am a bd bdy
-c Switch: complemento
A opção -c é usada para corresponder ao complemento do primeiro argumento (ou seja, todos os caracteres não listados em arg 1). Como resultado, arg 1 conterá muitas letras (256-3). Agora, a mesma coisa acontece com arg 2 como no caso anterior: o caractere final de Arg 2 é repetido para corresponder ao tamanho ou Arg 1. Portanto, a declaração original:
echo i am a good boy | tr -c good bad
é equivalente a:
echo i am a good boy | tr abcefhijklmnp... baddddddddddd...
(observe os g , o e d ausentes no primeiro conjunto, observe também que d substituirá todos os outros caracteres no segundo conjunto - incluindo o caractere de espaço)
É por isso que i am a good boy se transforma em dddddddgoodddodd
Mais informações aqui: link