Sự khác biệt giữa `-C` và` -c` trong lệnh` tr` là gì?


9

Hôm nay tôi đã học được một chút về trlệnh.

Nhưng tôi đã bị mắc kẹt trong việc hiểu sự khác biệt giữa -c-C.

Trên hướng dẫn, nó nói:

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

Tôi không hiểu ý nghĩa set of values in string1của -clựa chọn là gì.
Tôi nghĩ rằng nó có thể coi "ab"toàn bộ chuỗi 1 và sẽ thoát khỏi đơn ab.
Vì vậy, tôi đã làm một thí nghiệm:

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

Mọi thứ không phù hợp với mong đợi của tôi!
Vì vậy, sự khác biệt giữa -C-ctrong trlệnh là gì?


Phiên bản phần mềm: BSD 2004 trên OSX10.10


Câu trả lời:


6

Hướng dẫn POSIX nói điều này:

  • Nếu tùy chọn -C được chỉ định, phần bổ sung của các ký tự được chỉ định bởi chuỗi1 (tập hợp tất cả các ký tự trong bộ ký tự hiện tại, như được xác định bởi cài đặt hiện tại của LC_CTYPE, ngoại trừ các ký tự được chỉ định trong toán hạng chuỗi1) sẽ được đặt trong mảng theo trình tự đối chiếu tăng dần, như được xác định bởi cài đặt hiện tại của LC_COLLATE.

  • Nếu tùy chọn -c được chỉ định, phần bù của các giá trị được chỉ định bởi chuỗi1 sẽ được đặt trong mảng theo thứ tự tăng dần theo giá trị nhị phân.

và chứa các lưu ý sau

Tiêu chuẩn ISO POSIX-2: 1993 có tùy chọn -c hoạt động tương tự như tùy chọn -C, nhưng không cung cấp chức năng tương đương với tùy chọn -c được chỉ định trong POSIX.1-2008. Điều này có nghĩa là thực tế lịch sử về việc có thể chỉ định tr -cd \ 000- \ 177 (sẽ xóa tất cả các byte bằng tập bit trên cùng) sẽ không có hiệu lực bởi vì, trong ngôn ngữ C, các byte có giá trị bát phân 200 đến bát phân 377 không phải là nhân vật.

Từ đó, có vẻ như -ctùy chọn cho phép bạn chỉ định các giá trị số đại diện cho ký tự ASCII thay vì sử dụng chính các ký tự đó.


Auh, tôi đoán bởi vì tôi là phiên bản BSD 2004 trên OSX.
Zen

Nhưng vẫn tò mò về những gì có set of valuesnghĩa là trong phiên bản đầu tiên này.
Zen

@Zen xem bản chỉnh sửa của tôi
casey

Không, chúng không giống nhau trên BSD. Xem ở đó để biết chi tiết.
Stéphane Chazelas

3

Câu hỏi này thực sự là về BSD tr, không phải gnu tr.

Người đàn ông BSD:

 -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

OSX tích hợp sẵn các công cụ tôi sẽ tin là các phiên bản BSD.

[sửa lỗi chính tả, sed / tr]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.