Apa perbedaan antara perintah `-C` dan` -c` dalam perintah `tr`?

9

Hari ini saya belajar sedikit tentang trperintah.

Tapi saya terjebak dalam memahami perbedaan antara -cdan -C.

Di manual, tertulis:

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

Saya tidak begitu mengerti apa arti set of values in string1dari -copsi.
Saya pikir itu mungkin memperlakukan string 1 "ab"secara keseluruhan dan akan lolos tunggal adan b.
Jadi saya melakukan percobaan:

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

Hal-hal yang tidak sesuai dengan harapan saya!
Jadi, apa perbedaan antara -Cdan -cdi trperintah?


Versi Perangkat Lunak: BSD 2004 pada OSX10.10

Zen
sumber

Jawaban:

6

Manual POSIX mengatakan ini:

  • Jika opsi -C ditentukan, komplemen dari karakter yang ditentukan oleh string1 (himpunan semua karakter dalam himpunan karakter saat ini, sebagaimana ditentukan oleh pengaturan LC_CTYPE saat ini, kecuali untuk yang benar-benar ditentukan dalam operan string1) harus ditempatkan dalam array dalam urutan collending ascending, seperti yang didefinisikan oleh pengaturan LC_COLLATE saat ini.

  • Jika opsi -c ditentukan, komplemen dari nilai yang ditentukan oleh string1 harus ditempatkan dalam array dalam urutan naik dengan nilai biner.

dan berisi catatan berikut

Standar ISO POSIX-2: 1993 memiliki opsi -c yang berperilaku mirip dengan opsi -C, tetapi tidak menyediakan fungsionalitas yang setara dengan opsi -c yang ditentukan dalam POSIX.1-2008. Ini berarti bahwa praktik historis untuk dapat menentukan tr -cd \ 000- \ 177 (yang akan menghapus semua byte dengan set bit atas) tidak akan berpengaruh karena, di C locale, byte dengan nilai oktal 200 hingga oktal 377 bukan karakter.

Dari sini tampak bahwa -copsi memungkinkan Anda menentukan nilai numerik yang mewakili karakter ASCII alih-alih menggunakan karakter itu sendiri.

casey
sumber
Auh, saya kira karena saya adalah versi BSD 2004 di OSX.
Zen
Namun masih penasaran tentang apa set of valuesartinya di versi awal ini.
Zen
@ Zen lihat edit saya
casey
Tidak, mereka tidak sama pada BSD. Lihat di sana untuk detailnya.
Stéphane Chazelas
3

pertanyaan ini sebenarnya tentang BSD tr, bukan 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

Alat bawaan OSX akan saya yakini sebagai versi BSD.

[kesalahan ketik tetap, sed / tr]

Lizardx
sumber