「tr」コマンドで「-C」と「-c」の違いは何ですか?

「tr」コマンドで「-C」と「-c」の違いは何ですか?

今日は命令について学びましたtr

-cしかし、私はとの違いを理解してきました-C

取扱説明書は次のとおりです。

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

set of values in string1オプションが何を意味するのかわかりません-c
私はそれが文字列1を全体的に処理"ab"し、単一ab
それで私は次のような実験をしました。

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

仕事が期待どおりに進んでいない!それでは、
演出と演出の違いは何ですか?-C-ctr


ソフトウェアバージョン:OSX10.10のBSD 2004

答え1

POSIX マニュアルには次のように記載されています。

  • -Cオプションが指定されている場合、string1(実際に指定された文字を除く、文字列1オペランドにはLC_CTYPEの現在の設定で定義されている現在の文字セットのすべての文字セット)に指定された文字の補数が配置されます。 LC_COLLATE 定義の現在の設定に応じて昇順に並べて配置されます。

  • -cオプションを指定すると、string1で指定された値の補数がバイナリの昇順で配列に配置されます。

そして次の説明を含めてください

ISO POSIX-2:1993規格には、-Cオプションと同じように機能しますが、POSIX.1-2008で指定された-cオプションと同じ機能を提供しない-cオプションがあります。これは、Cロケールでバイト値が8進数200から8進数377であるため、tr -cd \ 000 - \ 177(最も高いビットが設定されているすべてのバイトを削除する)を指定できる歴史的慣行が機能しないことを意味します。キャラクターではありません。

この観点から、この-cオプションを使用すると、文字自体を使用するのではなく、ASCII文字を表す数値を指定できます。

答え2

この質問は実際にはgnu trではなくBSD trについてです。

BSD trの人々:

 -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の人々:

   -c, -C, --complement
          use the complement of SET1

私はOSXの組み込みツールがBSDバージョンになると信じています。

[タイプミス、sed/tr]

関連情報