tr - 文字を変換する

形式

tr [–c | C] [-s] string1 string2
tr –s [–c | C]  string1
tr –d [–c | C]  string1
tr –ds [–c | C] string1 string2

説明

tr は、標準入力から読み取ったデータを stdout にコピーします。 このとき、オプションおよび string1string2 で指定すると、文字の置き換えまたは削除を行います。string1string2 は、文字のセットと見なされます。 最も単純な形式では、tr は、string1 の各文字を変換し て、string2 の対応する位置に入れます。
注: tr は、照合エレメント・ベースではなく、文字ベース で動作します。したがって、例えば、正規表現に複数文字の照合エレメント ch を含む範囲は、ここでは照合エレメントを含みません。

オプション

–c
変数 _UNIX03 が未設定であるか YES に設定されていない場合、-c オプションの動作は、string1 で指定された文字の補集合をとります。これは、tr が、string1 にないすべての文字からなる 新しい文字の集合を構成し、この新しい集合 を string1 の代わりに使用することを意味します。

変数 _UNIX03=YES が設定されている場合、-c オプションの動作は string1 で指定された値の補集合をとります。これは、tr が新しい集合を構成し、string1 によって指定された値の補集合 (string1 オペランドで実際に指定されているものを除く、可能なすべてのバイナリー値) が、その新しい集合内にバイナリー値の昇順で配置されることを意味します。新しい集合は、string1 の代わりに使用されます。

-C
string1 によって指定される文字の集合を補完します。これは、tr が新しい集合を構成し、string1 によって指定された文字の補集合 (LC_CTYPE の現行の設定で定義されている現行の文字の集合のうち、string1 オペランドで実際に指定されているものを除くすべての文字からなる集合) がその新しい集合内に、LC_COLLATE の現行の設定で定義されている昇順の照合順序で配置されることを意味します。これは、変数 _UNIX03 が未設定であるか YES に設定されていない場合、 -c と同じ動作をします。
–d
string1 にある入力文字を出力から削除します。
–s
tr は、数回連続して繰り返す string1 文字のシーケンスを検査します。これが起きると、tr は、繰り返し文字のシーケンス を string2 の対応する文字のオカレンス 1 つと置き換えます。string2 が指定されていない場合、シーケンスは繰り返し文字自体の オカレンス 1 つと置き換えられます。例えば、以下のとおりです。
tr –s abc xyz
は、入力ストリング aaaabccccbxyzy という出力ストリングに変換します。
–d–s オプションを両方指定した場合 は、string1string2 の両方を指定する必要があります。この 場合、string1 には削除される文字を入れ、一方 string2 には複数回連続して出現する文字をその文字 1 回のみの出現に置き換えたい文字を入れます。例えば、以下のとおりです。
tr –ds a b
は、入力ストリング abbbaaacbbbcb という出力ストリングに変換します。

–s オプションのアクションは、他のすべての削除と変換の後に行 われます。

ストリング・オプション

以下の規則を使用して、string1string2 のエレメントを表 すことができます。
character
次に続く規則に述べられていない文字は、その文字自体を表します。
¥ooo
特定のコード値による文字の 8 進表示です。1 つ、2 つ、または 3 つの 8 進数字 (01234567) から構成できます。2 バイト文字には、このタイプの複数の連結されたエスケープ・シーケンスが必要です。 この中には、各バイトの先行 ¥ が含まれます。
¥character
¥ (円記号) 文字は、文字の特別な意味を除去する エスケープとして使用されます。また、C 文字定数の ¥b¥f¥n¥r¥t、および ¥v の方法で、非出力文字のエスケープ・シーケンスを取り 入れます。
c1c2
POSIX ロケールで、どの端点も ¥ooo の形式の 8 進シーケンスでない場合に、現行のロケールの照合順序で文字 c1c2 の間 (両端の値を含む) にあるすべての文字を表します。例えば、'a–z' は POSIX ロケールの小文字すべてを表し、'A–Z' はそのロケールの大文字すべてを表します。小文字と大文字を変換する 1 つの方法は、以下のフィルターを使うことです。
tr 'a-z' 'A-Z'

しかし、この方法はお勧めできません。代わりに、[:class:] 構成を 使用してください。

2 番目の端点が照合順序で開始の端点より前にある場合は、エラーになります。

範囲の一方または両方の端点が ¥ooo の形式の 8 進シーケンスである場合、これは 2 つの端点 (両端を含む) の間にある特定のコード値の範囲を表します。

この構文 c1c2 は、POSIX ロケールでのみ適用されます。
注: 現行のロケールは、この方法を使用して部分範囲を指定すると、結果に大きな影響を及ぼします。コマンドの結果がロケールに関係なく一貫している必要がある場合は、構文 c1-c2 を避けてください。
[c*n]
これは、文字 cn 回の反復を表し ます。(n に先行ゼロが付いていると、tr はこれが 8 進数 であるとみなします。先行ゼロがなければ、10 進数であるとみなし ます。) サブセットの最終文字の数は省略することができます。この表示は string2 でのみ有効です。
[:class:]
これは、LC_CTYPE によって示されるロケール内の 文字クラス class に属するすべての文字を表します。クラス [:upper] または [:lower:]string1 に現れ、しかも、その反対のクラス [:lower:] または [:upper:]string2 に現れる場合、tr は、同じ相対位置の LC_CTYPE tolower または toupper マッピングを使用します。
[=c=]
これは、LC_COLLATE によって示される文字 c と同じ 等価クラスに属するすべての文字を表します。コードの国際バージョンだけがこの形式をサポートします。

使用上の注意

string2string1 より短い場合、trstring2 に埋め込み文字を付加しません。string1 内の残りの文字は変換されません。例えば、以下のとおりです。
tr  '0123456789'  'd' 
と指定した場合、「0」だけが「d」に変換され、「123456789」は変換されずに残ります。
この例を、次のようにコーディングしたとします。
tr  '0123456789'  '[d*]'
この場合には、すべての桁が英字の「d」に変換されます。

以下の例は、file1 で見つかったすべてのワード (文字のストリング) のリストを 作成し、これを file2 に置きます。
tr –cs "[:alpha:]" "[¥n*]" <file1 >file2

環境変数

tr は、以下の環境変数を使用します。_UNIX03

このコマンドでの _UNIX03 の効果について詳しくは、UNIX03 用に変更されたシェル・コマンドを参照してください。

ローカライズ

tr は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_ALL
  • LC_COLLATE
  • LC_CTYPE
  • LC_MESSAGES
  • LC_SYNTAX
  • NLSPATH

詳しくは、ローカライズを参照してください。

終了値

0
正常終了
1
無効なコマンド行オプション、または少なすぎる引数による失敗。

移植性

POSIX.2, X/Open 移植性ガイド.

tr は、UNIX バージョン 7 と System V の両方におけるこのコマンドの変形体と下位の互換性がありますが、 拡張 (C エスケープ、ASCII NUL のハンドル、グローバリゼーション) とは互換性がありません。