tr コマンド
目的
文字を変換します。
構文
tr [ -c | -cds | -cs | -C | -Cds | -Cs | -ds | -s ] [ -A ] String1 String2
説明
tr コマンドは、標準入力からの文字を削除または置換して、その結果を標準出力に書き出します。tr コマンドは、String1 および String2 変数で指定された文字列と、指定されたフラグに応じて、3 種類の操作を実行します。
文字の変換
String1 および String2 変数を両方とも指定し、-d フラグを指定しなければ、tr コマンドは String1 に含まれる標準入力からの各文字を、String2 内の同じ位置にある文字に置き換えます。
-d フラグを使用した文字の削除
-d フラグを指定すると、tr コマンドは String1 に含まれる標準入力からの各文字を削除します。
-s フラグを使用したシーケンスの除去
-s フラグを指定すると、tr コマンドは、String1 または String2 で表されるすべての文字列のシーケンス内で、最初の文字を除くすべての文字を除去します。String1 内の文字ごとに、tr コマンドは、その文字の最初のオカレンスを除くすべてのオカレンスを標準出力から除去します。 String2 内の文字ごとに、 tr コマンドは、標準出力においてその文字のオカレンスのシーケンスのうち最初のオカレンスを除くすべてのオカレンスを除去します。
文字列表現のための特殊シーケンス
String1 および String2 変数に含まれる文字列は、以下の表記法を使用して表現できます。
| 項目 | 説明 |
|---|---|
| C1- C2 | C1 で指定された文字と C2 で指定された文字 (それら自身も含む) の間を照合する文字の文字列を指定します。C1 で指定された文字の照合順は、C2 で指定された文字より前の照合順でなければなりません。
注: この方法を使って部分範囲を指定する際、現行ロケールは得られる結果に対して多大な影響を与えます。コマンドがロケールに関係なく一貫した結果を出す必要がある場合は、部分範囲の使用は避けなければなりません。
|
| [C *Number] | Number は、C により指定される文字の繰り返し回数を指定する整数値です。Number は、最初の数字が 0 でない限り、10 進整数と見なされます。最初が 0 の場合は 8 進数と見なされます。 |
| [C*] | C で指定される文字で文字列を埋め込みます。このオプションは、String2 内に含まれる文字列の最後にのみ使用され、String2 内の文字列の文字数を String1 変数で指定された文字列内の文字数と同じにします。* (アスタリスク) の後に指定した文字はすべて無視されます。 |
| [ : ClassName: ] | 現行ロケール内にある ClassName で指名された文字クラス内のすべての文字を指定します。クラス名には、以下の名前が使用できます。
[: 文字クラスについての詳細情報は、ctype サブルーチンを参照してください。 |
| [ =C= ] | C により指定された文字と等価クラスを持つ文字をすべて指定します。 |
| ¥Octal | エンコードしたものが、Octal で指定された 8 進数値で表される文字を指定します。Octal は 1 桁、2 桁、3 桁の 8 進整数です。NULL 文字は、 '¥0' で表すことができ、他の文字と同様に処理されます。 |
| ¥ControlCharacter | ControlCharacter により指定される値に対応する制御文字を指定します。指定される値は以下の制御文字を表します。
|
| ¥¥ | エスケープ文字としての意味を持たない、円記号 (¥) 自体を指定します。 |
| ¥[ | 特殊文字列シーケンスの始まりとしての特別な意味を持たない、左大括弧 ([) 自体を指定します。 |
| ¥- | 範囲セパレーターとしての特別な意味を持たない、負符号 (-) 自体を指定します。 |
String1 で文字が 1 回または複数回指定されている場合、その文字は、String1 内の文字の最後のオカレンスに対応する String2 内の文字に変換されます。
String1 および String2 により指定された文字列が同じ長さでなければ、tr コマンドは長い方の文字列の余分な文字を無視します。
フラグ
| 項目 | 説明 |
|---|---|
| -A | 現行ロケール用の照合順序ではなく、範囲および文字クラス用の ASCII 照合順序を使用して、バイト単位ですべての操作を行います。 |
| -C | String1 の値を String1 で指定された文字列の補集合 によって置換するよう指定します。String1 の補集合は、現行ロケールの文字セットの中から String1 で指定された文字を除いた すべての文字です。-A フラグと -c フラグを両方とも指定すると、文字はすべての 8 ビット文字コード・セットに関連した補集合になります。-c フラグと -s フラグの両方を指定すると、-s フラグは String1 の補集合の中の文字に適用されます。
-d オプションが指定されていない場合は、 String1 で指定された文字の補集合が、 LC_COLLATE の現在の設定で定義された昇順照合シーケンスのアレイに置かれます。 |
| -c | String1 の値を String1 で指定された文字列の補集合 によって置換するよう指定します。String1 の補集合は、現行ロケールの文字セットの中から String1 で指定された文字を除いた すべての文字です。-A フラグと -c フラグを両方とも指定すると、文字はすべての 8 ビット文字コード・セットに関連した補集合になります。-c フラグと -s フラグの両方を指定すると、-s フラグは String1 の補集合の中の文字に適用されます。
-d オプションが指定されていない場合は、 String1 で指定された値の補集合が、 バイナリー値により昇順でアレイに置かれます。 |
| -d | 標準入力から String1 で指定された文字列内に含まれる各文字を削除します。
注:
|
| -s | 繰り返される文字シーケンスを、最初の文字を除きすべて除去します。String1 で指定された文字シーケンスは変換の前に標準入力から除去され、String2 で指定された文字シーケンスは標準出力から除去されます。 |
| String1 | 文字の文字列を指定します。 |
| String2 | 文字の文字列を指定します。 |
終了状況
このコマンドは、以下の終了値を戻します。
| 項目 | 説明 |
|---|---|
| 0 | すべての入力は正常に処理されました。 |
| >0 | エラーが発生しました。 |
例
- 中括弧を小括弧に変換するには、以下のように入力します。
これにより、各 { (左中括弧) は ( (左小括弧) に、各 } (右中括弧) は ) (右小括弧) に変換されます。他の文字は変更されません。tr '{}' '()' < textfile > newfile - 中括弧を大括弧に変換するには、以下のように入力します。
これにより、各 { (左中括弧) は [ (左大括弧) に、各 } (右中括弧) は ] (右大括弧) に変換されます。左大括弧は、¥ (円記号) エスケープ文字を付けて入力しなければなりません。tr '{}' '¥[]' < textfile > newfile - 英小文字を英大文字に変換するには、以下のように入力します。
tr 'a-z' 'A-Z' < textfile > newfile - ファイル内のワードのリストを生成するには、以下のように入力します。
これにより、英小文字および英大文字以外の各文字シーケンスは 1 つの改行文字に変換されます。* (アスタリスク) により、tr コマンドは第 2 の文字列が第 1 の文字列と同じ長さになるまで、改行文字を繰り返します。tr -cs '[:lower:][:upper:]' '[¥n*]' < textfile > newfile - ファイルからすべての NULL 文字を削除するには、以下のように入力します。
tr -d '¥0' < textfile > newfile - 1 つ以上の改行文字の各シーケンスを 1 つの改行文字に
置き換えるには、以下のように入力します。
またはtr -s '¥n' < textfile > newfiletr -s '¥012' < textfile > newfile - 有効な制御文字以外のすべての非印刷文字を ?
(疑問符) に置き換えるには、以下のように入力します。
これにより、異なるロケールで作成されたファイルがスキャンされ、現行ロケールで表示不可能な文字が検索されます。tr -c '[:print:][:cntrl:]' '[?*]' < textfile > newfile - <space> 文字クラス内のすべての文字シーケンスを、1 つの # 文字に置き換えるには、以下のように入力します。
tr -s '[:space:]' '[#*]'