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


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.


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]

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.