Quelle est la différence entre `-C` et` -c` dans la commande `tr`?


9

Aujourd'hui, j'ai appris un peu la trcommande.

Mais j'étais coincé à comprendre la différence entre -cet -C.

Sur le manuel, il était écrit:

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

Je comprends pas tout à fait ce que fait set of values in string1de -cmoyenne option.
Je pensais que ce peut traiter chaîne 1 "ab"dans son ensemble et échapper unique aet b.
J'ai donc fait une expérience:

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

Les choses ne correspondaient pas à mes attentes!
Alors, quelle est la différence entre -Cet -caux trcommandes?


Version du logiciel: BSD 2004 sur OSX10.10


Réponses:


6

Le manuel POSIX dit ceci:

  • Si l'option -C est spécifiée, les compléments des caractères spécifiés par string1 (l'ensemble de tous les caractères du jeu de caractères actuel, tel que défini par le paramètre actuel de LC_CTYPE, à l'exception de ceux réellement spécifiés dans l'opérande string1) doivent être placés dans le tableau dans l'ordre de classement croissant, tel que défini par le paramètre actuel de LC_COLLATE.

  • Si l'option -c est spécifiée, le complément des valeurs spécifiées par string1 doit être placé dans le tableau dans l'ordre croissant par valeur binaire.

et contient la note suivante

La norme ISO POSIX-2: 1993 avait une option -c qui se comportait de manière similaire à l'option -C, mais ne fournissait pas de fonctionnalité équivalente à l'option -c spécifiée dans POSIX.1-2008. Cela signifiait que la pratique historique de pouvoir spécifier tr -cd \ 000- \ 177 (qui supprimerait tous les octets avec le bit supérieur défini) n'aurait aucun effet parce que, dans la langue C, les octets avec les valeurs octal 200 à octal 377 ne sont pas des personnages.

De cela, il apparaît que l' -coption vous permet de spécifier des valeurs numériques représentant le caractère ASCII au lieu d'utiliser les caractères eux-mêmes.


Euh, je suppose que la mienne était la version BSD 2004 sur OSX.
Zen

Mais toujours curieux de savoir ce que cela set of valuessignifie dans cette première version.
Zen

@Zen voir mon montage
casey

Non, ce n'est pas la même chose sur les BSD. Voir pour plus de détails.
Stéphane Chazelas

3

cette question concerne donc BSD tr, pas 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

Les outils intégrés OSX seront, je crois, les versions BSD.

[faute de frappe, sed / tr]

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.