Qual é a diferença entre '-C' e '-c' no comando 'tr'?

8

Hoje eu aprendi um pouco sobre o comando tr .

Mas eu estava empenhado em entender a diferença entre -c e -C .

No manual, dizia:

 -C      Complement the set of characters in string1, that is ''-C ab'' includes every character except for 'a' and 'b'.

 -c      Same as -C but complement the set of values in string1.

Não entendo bem o que significa set of values in string1 de -c .
Eu pensei que ele pode tratar string 1 "ab" como um todo e vai escapar único a e b .
Então eu fiz um experimento:

⇒  echo "ab_a_b" | tr -C 'ba' 'c'
abcacbc%                                                                                                                                                                             
⇒  echo "ab_a_b" | tr -c 'ba' 'c'
abcacbc%

As coisas não correspondem à minha expectativa!
Então, qual é a diferença entre o comando -C e -c in tr ?

Versão do software: BSD 2004 no OSX10.10

    
por Zen 09.11.2015 / 03:52

2 respostas

6

O manual do POSIX diz isso:

  • 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.

e contém a seguinte nota

The ISO POSIX-2:1993 standard had a -c option that behaved similarly to the -C option, but did not supply functionality equivalent to the -c option specified in POSIX.1-2008. This meant that historical practice of being able to specify tr -cd%bl0ck_qu0te%0-7 (which would delete all bytes with the top bit set) would have no effect because, in the C locale, bytes with the values octal 200 to octal 377 are not characters.

A partir disso, parece que a opção -c permite que você especifique valores numéricos representando o caractere ASCII, em vez de usar os próprios caracteres.

    
por 09.11.2015 / 03:59
3

essa questão é, na verdade, sobre o BSD tr, não o gnu tr.

BSD tr man:

 -C      Complement the set of characters in string1, that is ''-C ab''
         includes every character except for 'a' and 'b'.

 -c      Same as -C but complement the set of values in string1.

FreeBSD 8.2                    October 13, 2006

GNU tr man:

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

As ferramentas integradas do OSX serão as versões BSD.

[erro de digitação fixo, sed / tr]

    
por 09.11.2015 / 04:11