Não consigo entender o que o parâmetro -c faz no comando tr no Ubuntu GNU / Linux, embora eu tenha lido o manual

2

Eu tento entender o que a opção -c faz no comando tr de acordo com o comando man tr diz:

-c, -C, --complement use the complement of SET1

Mas não consigo entender o que o documento quer dizer com "complemento" , então fiz o seguinte exemplo para entender:

Eu criei o seguinte arquivo chamado trance.txt :

ILOVE YOU
I HATE YOU
i WANNA EAT APPLE PIE

E eu corro: tr -C A-Za-z "\n" < trance.txt

Isso dá a saída:

ILOVE
YOU
I
HATE
YOU
i
WANNA
EAT
APPLE
PIE

Mas ainda não entendi o que realmente a opção -c faz. Você pode me explicar por favor?

    
por Dimitrios Desyllas 06.06.2018 / 13:25

1 resposta

4

Substitui o conjunto A-Za-z por seu complemento, ou seja, todos os caracteres no conjunto de caracteres atual, menos os especificados. Citando POSIX , na ausência de -d :

  • If the -C option is specified, the complements of the characters specified by string1 (the set of all characters in the current character set, as defined by the current setting of LC_CTYPE, except for those actually specified in the string1 operand) shall be placed in the array in ascending collation sequence, as defined by the current setting of LC_COLLATE.

  • If the -c option is specified, the complement of the values specified by string1 shall be placed in the array in ascending order by binary value.

Assim, seu comando está substituindo todos os caracteres que não A-Z ou a-z por novas linhas.

Como tr usa um mapa de caracteres um-para-um para suas substituições , não é tão Simples assim; As opções -c e -C não são apenas "não em", elas criam o conjunto de todos os caracteres que não estão no conjunto determinado, na ordem especificada pela opção. Isso só é relevante se o conjunto de alvos tiver mais de um caractere.

    
por 06.06.2018 / 13:38

Tags