usando o comando tr -t [questão de compreensão]

1

Ao usar o comando tr -t , string1 deve 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? tr traduz, de acordo com o padrão, ignorando completamente a opção -t . Se eu completar automaticamente para --truncate-set1 [para garantir que eu use a opção correta] produza a mesma saída.

Pergunta : o que estou fazendo de errado aqui?

Eu trabalho no BASH, em uma distro baseada no Debian.

UPDATE

Por favor, note que esta é uma cópia de um comentário que fiz abaixo

Eu achei que tr -t significa: encurtar string1 para o comprimento de string2 . Vejo que a é traduzido para 1 , que b seria traduzido para 2 e que c é traduzido para 3 . Isso não tem nada a ver com encurtamento. "Truncar" parece significar algo diferente do que eu pensava. [Eu não sou nativo]

    
por erch 26.04.2013 / 16:45

1 resposta

5

When using tr -t command, string1 should be truncated to the length of string2, right?

Não foi isso que aconteceu?

abcdefghijklmn
123

Observe quais letras são e não sã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ê recebe:

t33 33331r 3s t33 s133st p3133

Isso ocorre porque (de man tr ), "SET2 é estendido para comprimento de SET1 repetindo seu último caractere conforme necessário." Sem o -t para truncar o conjunto 1, o que você tem é o mesmo que

tr abcdefhijklmn 1233333333333

Vamos considerar outro exemplo, mas usando o mesmo "a adega é 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. -t essencialmente faz 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

Qual é o mesmo que:

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

Desde que o 's' foi truncado desde o primeiro conjunto. Se os dois conjuntos tiverem o mesmo tamanho, usar -t não fará 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
    
por 26.04.2013 / 16:53

Tags