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.