¿Cuál es la diferencia entre `-C` y` -c` en el comando `tr`?

9

Hoy aprendí un poco sobre el trcomando.

Pero estaba atrapado en comprender la diferencia entre -cy -C.

En el manual, decía:

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

No estoy muy bien lo hace set of values in string1de -cmedia opción.
Pensé que podría tratar la cadena 1 "ab"como un todo y escapará solo ay b.
Entonces hice un experimento:

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

¡Las cosas no coincidieron con mis expectativas!
Entonces, ¿cuál es la diferencia entre -Cy -cal trmando?


Versión de software: BSD 2004 en OSX10.10

zen
fuente
Vea esta discusión: thread.gmane.org/gmane.comp.standards.posix.austin.general/…
Stéphane Chazelas

Respuestas:

6

El manual POSIX dice esto:

  • Si se especifica la opción -C, se colocarán los complementos de los caracteres especificados por string1 (el conjunto de todos los caracteres en el conjunto de caracteres actual, según lo definido por la configuración actual de LC_CTYPE, excepto los realmente especificados en el operando string1) en la matriz en secuencia de clasificación ascendente, según lo definido por la configuración actual de LC_COLLATE.

  • Si se especifica la opción -c, el complemento de los valores especificados por string1 se colocará en la matriz en orden ascendente por valor binario.

y contiene la siguiente nota

El estándar ISO POSIX-2: 1993 tenía una opción -c que se comportaba de manera similar a la opción -C, pero no proporcionaba una funcionalidad equivalente a la opción -c especificada en POSIX.1-2008. Esto significaba que la práctica histórica de poder especificar tr -cd \ 000- \ 177 (que eliminaría todos los bytes con el conjunto de bits superior) no tendría ningún efecto porque, en la configuración regional C, los bytes con los valores octal 200 a octal 377 No son personajes.

A partir de esto, parece que la -copción le permite especificar valores numéricos que representan el carácter ASCII en lugar de utilizar los propios caracteres.

casey
fuente
Auh, supongo que porque la mía fue la versión BSD 2004 en OSX.
Zen
Pero aún tiene curiosidad acerca de lo que set of valuessignifica en esta versión inicial.
Zen
@Zen ver mi edición
casey
No, no son lo mismo en BSD. Ver allí para más detalles.
Stéphane Chazelas
3

Esta pregunta es en realidad sobre BSD tr, no sobre 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

Las herramientas integradas de OSX creo que serán las versiones BSD.

[error tipográfico fijo, sed / tr]

Lagarto
fuente