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


9

今日、私は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"を全体として扱い、単一のaand をエスケープするだろうと思いましたb
だから私は実験をしました:

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

物事が私の予想と一致しませんでした!
だから、違いは何だ-C-cにおけるtrコマンドは?


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


回答:


6

POSIXマニュアルはこれを言っています:

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

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

次のメモが含まれています

ISO POSIX-2:1993標準には、-cオプションと同様に動作する-cオプションがありましたが、POSIX.1-2008で指定された-cオプションと同等の機能を提供していませんでした。これは、Cロケールでは8進数の200から8進数の377までの値を持つバイトであるため、tr -cd \ 000- \ 177(最上位ビットが設定されたすべてのバイトを削除する)を指定できるという歴史的な慣習は効果がないことを意味します文字ではありません。

このことから、-cオプションを使用すると、文字自体を使用する代わりに、ASCII文字を表す数値を指定できるように見えます。


ああ、私がOSXの2004 BSDバージョンだったからだと思います。
Zen

しかしset of values、この初期のバージョンで何が意味するのかまだ気になります。
Zen

私の編集を参照してください@Zen
ケーシー

いいえ、BSDでは同じではありません。詳細はそちらをご覧ください。
ステファンChazelas

3

この質問は実際にはBSD trに関するものであり、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

OSXの組み込みツールはBSDバージョンだと思います。

[修正されたタイプミス、sed / tr]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.