Qual è la differenza tra `-C` e` -c` nel comando `tr`?


9

Oggi ho imparato un po 'di trcomando.

Ma ero bloccato nel capire la differenza tra -ce -C.

Sul manuale, diceva:

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

Io non sono ben capito che cosa fa set of values in string1di -copzione media.
Ho pensato che potrebbe trattare la stringa 1 "ab"nel suo insieme e sfuggirà al singolo ae b.
Quindi ho fatto un esperimento:

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

Le cose non corrispondevano alle mie aspettative!
Quindi, qual è la differenza tra -Ce -cal trcomando?


Versione software: BSD 2004 su OSX10.10


Risposte:


6

Il manuale POSIX dice questo:

  • Se viene specificata l'opzione -C, devono essere inseriti i complementi dei caratteri specificati da string1 (l'insieme di tutti i caratteri nel set di caratteri corrente, come definito dall'impostazione corrente di LC_CTYPE, ad eccezione di quelli effettivamente specificati nell'operando string1) nell'array in sequenza crescente di regole di confronto, come definito dall'impostazione corrente di LC_COLLATE.

  • Se viene specificata l'opzione -c, il complemento dei valori specificati da string1 deve essere posizionato nell'array in ordine crescente per valore binario.

e contiene la seguente nota

Lo standard ISO POSIX-2: 1993 aveva un'opzione -c che si comportava in modo simile all'opzione -C, ma non forniva funzionalità equivalente all'opzione -c specificata in POSIX.1-2008. Ciò significava che la pratica storica di poter specificare tr -cd \ 000- \ 177 (che eliminerebbe tutti i byte con il set di bit superiore) non avrebbe alcun effetto perché, nella locale C, i byte con i valori da 200 a ottale 377 ottali non sono personaggi.

Da ciò sembra che l' -copzione consenta di specificare valori numerici che rappresentano caratteri ASCII anziché utilizzare i caratteri stessi.


Ah, immagino perché la mia era la versione BSD del 2004 su OSX.
Zen,

Ma sono ancora curioso di sapere cosa set of valuessignifichi in questa prima versione.
Zen,

@Zen vedi la mia modifica
Casey

No, non sono gli stessi sui BSD. Vedi qui per i dettagli.
Stéphane Chazelas,

3

questa domanda riguarda effettivamente BSD tr, non 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

Credo che gli strumenti integrati OSX saranno le versioni BSD.

[errore di battitura fisso, sed / tr]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.