usando o comando tr -t

usando o comando tr -t

Ao usar tr -to comando, string1deve ser truncado para o comprimento de string2, certo?

tr -t abcdefghijklmn 123          # abc... = string1, 123 = string2
the cellar is the safest place    # actual input
the 3ell1r is the s1fest pl13e    # actual output

'truncar' é outra palavra para 'encurtar', certo? trtraduz, de acordo com o padrão, ignorando completamente a -topção. Se eu preencher automaticamente para --truncate-set1[para garantir que uso a opção correta] produzirá a mesma saída.

Pergunta: O que estou fazendo de errado aqui?

Eu trabalho no BASH, em uma distribuição baseada em Debian.

ATUALIZAR

Observe que esta é uma cópia de um comentário que fiz abaixo

Eu pensei tr -tque significa:encurte string1 para o comprimento de string2. Vejo que aestá traduzido para 1, que bseria traduzido para 2e que cestá traduzido para 3. Isso não tem nada a ver com encurtamento. 'Truncar' parece significar algo diferente do que eu pensava. [Não sou falante nativo]

Responder1

Ao usar o comando tr -t, string1 deve ser truncado para o comprimento de string2, certo?

Não foi isso que aconteceu?

abcdefghijklmn
123

Observe quais letras são ou não trocadas:

the 3ell1r is the s1fest pl13e

'a' e 'c', mas não e, f, i ou l, que estavam no conjunto original (não truncado) 1.

Sem o -t, você obtém:

t33 33331r 3s t33 s133st p3133

Isso ocorre porque (de man tr),"SET2 é estendido até o comprimento de SET1repetindo seu último caracterecomo necessário." Então, sem -ttruncar o conjunto 1, o que você tem é o mesmo que

tr abcdefhijklmn 1233333333333

Vamos considerar outro exemplo, mas usando o mesmo “o porão é o lugar mais seguro” como entrada.

> input="the cellar is the safest place"
> echo $input | tr is X
the cellar XX the XafeXt place

Isso ocorre porque o segundo conjunto é automaticamente estendido para cobrir todo o primeiro conjunto. -tessencialmentefaz o oposto disso; trunca o primeiro conjunto em vez de estender o segundo:

> echo $input | tr -t is X
the cellar Xs the safest place

Que é o mesmo que:

> echo $input | tr i X
the cellar Xs the safest place

Já que o 's' foi truncado do primeiro conjunto. Se os dois conjuntos tivessem o mesmo comprimento, usar -tnão faria diferença:

> echo $input | tr is XY
the cellar XY the YafeYt place
> echo $input | tr -t is XY
the cellar XY the YafeYt place

informação relacionada