tr コマンド
目的
これは、文字または文字範囲を変換します。
構文
文字または文字列を変換する場合:
tr [ -c | -cds | -cs | -C | -Cds | -Cs | -ds | -s ] [ -A ] String1 String2
文字または文字列を削除する場合:
tr { -cd | -cs | -Cd | -Cs | -d | -s } [ -A ] String1
特定のロケールに関して文字範囲を定義する場合:
[LANG=ll_RR] tr -L {c1-cn C1-Cn} {c1c2c3c4c5c6…cn C1C2C3C4C5C6…Cn}
ユーザーが指定する文字範囲を削除する場合:
[LANG=ll_RR] tr -L {c1-cn C1-Cn}
説明
tr コマンドは、標準入力からの文字を削除または置換して、その結果を標準出力に書き出します。また、tr コマンドは、特定のロケールに関して文字範囲を定義します。 tr コマンドは、String1 変数および String2 変数で指定された文字列と、ユーザーが指定したフラグに応じて、以下のタイプの操作を実行します。
文字の変換
String1 および String2 変数を両方とも指定し、-d フラグを指定しなければ、tr コマンドは String1 に含まれる標準入力からの各文字を、String2 内の同じ位置にある文字に置き換えます。
-d フラグを使用した文字の削除
-d フラグを指定すると、tr コマンドは String1 に含まれる標準入力からの各文字を削除します。
-s フラグを使用したシーケンスの除去
-s フラグを指定すると、tr コマンドは、String1 または String2 で表されるすべての文字列のシーケンス内で、最初の文字を除くすべての文字を除去します。String1 内の文字ごとに、tr コマンドは、その文字の最初のオカレンスを除くすべてのオカレンスを標準出力から除去します。 String2 内の文字ごとに、 tr コマンドは、標準出力においてその文字のオカレンスのシーケンスのうち最初のオカレンスを除くすべてのオカレンスを除去します。
現行ロケール環境において文字範囲を定義
tr コマンドの -L フラグを使用すれば、特定のロケール、コード・セット、およびユーザーに関して文字範囲を指定できます。
tr コマンドは、指定された文字範囲を保持および認識します。
tr コマンドは、この情報を使用して、文字を、範囲内にマップされた文字に変換します。
-L フラグで指定された文字範囲 c1-cn
は文字 c1c2c3c4c5c6...cn
にマップされ、指定された文字範囲 C1-Cn
は文字 C1C2C3C4C5C6...Cn
にマップされます。
文字列表現のための特殊シーケンス
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 進数値で表される文字を指定します。8 進数値には、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 で指定された文字列内に含まれる各文字を削除します。
注:
|
-L | これは、現行ロケール環境におけるユーザー定義の文字範囲を $HOME/.trregexrc/$CODESET ファイルに追加します。
文字範囲 c1-cn は c1c2c3c4c5c6...cn にマップされ、文字範囲 C1-Cn は C1C2C3C4C5C6...Cn にマップされます。
-L ファイルはユーザー固有 ($HOME 変数に依存する) であり、コード・セット固有であり、ロケール固有 ($LANG 変数に依存する) です。 つまり、特定のユーザー、コード・セット、およびロケールに対して文字範囲を定義する必要があります。 特定のユーザーやロケールの $HOME/.trregexrc/$CODESET ファイルが存在しない場合は、-L フラグが指定されたときに、そのファイルが自動的に生成されます。 |
-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 > newfile
tr -s '¥012' < textfile > newfile
- 有効な制御文字を除くすべての非印刷文字を ? (疑問符) で置き換えるには、次のコマンドを入力します。
これにより、異なるロケールで作成されたファイルがスキャンされ、現行ロケールで表示不可能な文字が検索されます。tr -c '[:print:][:cntrl:]' '[?*]' < textfile > newfile
- <space> 文字クラス内の各文字列を 1 つの # 文字で置き換えるには、次のコマンドを入力します。
tr -s '[:space:]' '[#*]'
- 特定のロケールについて文字範囲を定義するには、次のコマンドを入力します。
このコマンドは、LANG=ES_ES tr -L a-z A-Z abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
ES_ES
(Spanish_Spain) ロケールについて文字範囲 a-z および A-Z を定義します。 - 特定のロケールについて文字範囲を削除するには、次のコマンドを入力します。
LANG=ES_ES tr -L a-z A-Z