ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
マニュアルページセクション 1: ユーザーコマンド Oracle Solaris 11 Information Library (日本語) |
- 文字の変換
/usr/bin/tr [-cds] [string1 [string2]]
/usr/xpg4/bin/tr [-cs] string1 string2
/usr/xpg4/bin/tr -s | -d [-c] string1
/usr/xpg4/bin/tr -ds [-c] string1 string2
/usr/xpg6/bin/tr [-c | -C] [-s] string1 string2
/usr/xpg6/bin/tr -s [-c | -C] string1
/usr/xpg6/bin/tr -d [-c | -C] string1
/usr/xpg6/bin/tr -ds [-c | -C] string1 string2
tr ユーティリティは、選択した文字を置き換えるか削除して、標準入力を標準出力へコピーします。指定されたオプションと string1 と string2 の両オペランドにより、文字や単一文字比較要素のコピー中に発生する変換を制御します。
次のオプションがサポートされています。
string1 で指定された値のセットを補完します。
string1 で指定された文字のセットを補完します。
string1 で指定された文字を入力中からすべて削除します。
繰り返して現れた文字を 1 個の文字に置き換えます。
-d オプションを指定しない場合、 以下の処理が行われます。
string1 で指定した配列中の文字が入力中で見つかった場合、string2 で指定した配列中の同じ位置にある文字に置き換えます。string2 が示す配列が string1 が示す配列より短い場合、処理の結果は不確定です。
-c オプションを指定した場合、string1 で指定した値の補完は、配列内に、バイナリ値による昇順で配置されます。
-C オプションを指定すると、string1 で指定された文字の補完集合 (LC_CTYPE の現在の設定値で定義されている現文字セット内のすべての文字から、string1 オペランドで実際に指定された文字を除いたもの) が、LC_COLLATE の現在の設定値で定義されている照合順序に従って、昇順で配列に置かれます。
なお文字クラス表現や同等クラス表現により指定される文字の順序は 定義されていないため、そのような表現を使用するのは、複数の文字を同一の文字にマップする場合に限るべきです。ただし前述のように、大文字と小文字との間の変換は例外です。
-d オプションを指定すると、以下の処理が行われます。
string1 で指定した配列中にある入力文字は削除されます。
-C オプションも一緒に指定された場合、string1 で指定した文字を除くすべての文字が削除されます。--s オプションが指定されていなければ、string2 の内容は無視されます。
-c オプションを指定した場合、string1 で指定した値の補完は、配列内に、バイナリ値による昇順で配置されます。
-d と -s の 2 つのオプションに、同じ文字列を指定することはできません。2 つのオプションをともに指定する場合、削除用の string1 と圧縮用の string2 を両方とも指定しなければなりません。
-s オプションを指定すると、何らかの削除または変換発生後に同じ文字が連続して出現し、その文字が最終オペランドで指定した配列中に存在していれば、一連の文字はその文字 1 個に置き換えられます。最終オペランドとして、次の例に示すような文字クラスが指定されたとします。
tr -s '[:space:]'
この場合、最終オペランドの配列には、その文字クラスのすべての文字が含まれることになります。ただし、前述のように、大文字と小文字の変換が次のように指定された場合は異なります。
tr -s '[:upper:]' '[:lower:]'
この場合、最終オペランドの配列には、toupper と tolower の対のうち 2 番目の文字として定義されている方の文字だけが含まれます (toupper(3C) と tolower(3C) を参照)。
string1 または string2 に空の文字列を指定した場合、処理の結果は予測できません。
次のオペランドがサポートされています。
変換を制御する文字列です。各文字列は、変換に使用される文字配列に置き換えられる、一群の文字を表します。
オペランド string1 と string2 により 2 個の文字配列を定義します。以下に示す要素を使って、文字や 単一文字照合要素を指定できます。これらの要素を使った結果、複数文字 照合要素が得られた場合には、tr は配列からその複数文字要素を除きます。このとき、診断メッセージは発行しません。
以下の説明文中に現れない文字は、その文字自体を表します。
8 進数のシーケンスを使って、具体的なコード値を示す文字を表すことができます。8 進数シーケンスは、バックスラッシュの後に最大 1 、 2 、または 3 桁の 8 進数 (01234567) を付加したものです。ここで指定したシーケンスにより、 1 、 2 、または 3 桁の 8 進整数で表される文字が、配列中に配置されます。複数バイト文字は、この種のエスケープシーケンスがいくつか連続したものを必要とします。そのとき、各バイトの先頭に \ が必要です。
バックスラッシュ付きのエスケープシーケンスとして、\a、\b、\f、\n、\r、\t、\v がサポートされています。バックスラッシュの後に、これ以外の文字で 8 進数字でもない文字を指定した場合、結果は不確定です。
POSIX ロケールでは、照合シーケンスで定義されたように、この構文は範囲端点間にある照合要素の範囲を表します (どちらの端点も \octal 形式の 8 進数シーケンスでない場合に限る)。この範囲に含まれる文字または照合要素は、昇順で配列中に置かれます。照合シーケンスで 2 番目の端点が開始端点の前に来る場合は、照合要素の範囲が空であるのか、またはこの構文が無効として処理されるかどうかは特定されません。POSIX 以外のロケールでは、この構文の動作は特定されません。
範囲端点のどちらかまたは両方が \octal 形式の 8 進数シーケンスである場合、2 つの範囲端点間にあるコーディングされた特定のバイナリの範囲を表します。
現在の LC_CTYPE ロケールカテゴリの設定値に従い、指定された文字クラスに属するすべての文字を表します。以下の文字クラス名が string1 として指定できます。
alnum blank digit lower punct upper alpha cntrl graph print space xdigit
さらに、[:name:] 形式の文字クラス式も指定できます。ただし、name が LC_CTYPE カテゴリ内で charclass 定義を与えられているようなロケールにおいてのみです。
-d と -s の両オプションが指定されていれば、どんな文字クラス名でも string2 に指定できます。そうでなければ、lower または upper だけが string2 として指定できます。ただし、これに対応する文字クラス upper または lower が string1 中の同等の位置に指定された場合だけです。このような指定は、大文字と小文字間の変換要求と見なされます。[:lower:] が string1 中に現れ、[:upper:] が string2 中に現れた場合、現在のロケールの LC_CTYPE カテゴリ中の toupper マッピングから得られる文字が、配列に含まれることになります。[:upper:] が string1 中に現れ、[:lower:] が string2 中に現れた場合、現在のロケールの LC_CTYPE カテゴリ中の tolower マッピングから得られる文字が、配列に含まれることになります。各マッピングの対の最初の文字が string1 の配列に、 2 番目の文字が string2 の配列に置かれます。配列内での位置は同じになります。
大文字と小文字間の変換の場合を除き、文字クラス式で指定された文字を配列中に置く順序は決まっていません。
class に指定した文字が現在のロケール用の正しい文字クラスを表していない場合、処理の結果は予測できません。
現在の LC_COLLATE ロケールカテゴリの設定による定義に従い、指定された文字クラスに属するすべての文字を表します。equiv と同じ同等クラスに属するすべての文字または照合要素を表します。同等クラス式は strint1 に指定できます。また -d と -s の両オプションを指定した場合には、string2 にも指定できます。この同等クラスに属する文字を配列に置く順序は、決まっていません。
x が示す文字の n 回の連続発生を表します。この式は複数の文字を 1 個の文字にマップするために使用するので、string2 にだけ指定できます。n の先頭の数字が 0 のとき、この数値は 8 進数と見なされます。それ以外の場合、10 進数と見なされます。
n を省略した場合、または 0 の場合は、/usr/bin/tr はこれを非常に大きいと解釈します。/usr/xpg4/bin/tr および /usr/xpg6/bin/tr は、これを string2 ベースのシーケンスを string1 ベースのシーケンスの長さまで拡張できるほど十分な大きさがあると解釈します。
ファイルが 2G バイト (231 バイト) 以上ある場合の tr の動作については、largefile(5) を参照してください。
例 1 文字リストを作成する
以下の例は、file1 中にあるすべての単語を 1 行に 1 個の形式で file2 に出力します。ここで言う単語とは、最大文字列を表します。
tr -cs "[:alpha:]" "[\n*]" <file1 >file2
例 2 文字を変換する
次の例は、file1 中のすべての小文字を大文字に変換し、その結果を標準出力に 書き出します。
tr "[:lower:]" "[:upper:]" <file1
なお、対応する XPG3 での例に示されている警告は、この場合有効ではありません。この大文字・小文字変換は、tolower と toupper を使った特殊なケースで、ロケールが正しく定義されているとき、マッピングが正しく行われることを確認するものです。
例 3 同じ文字を識別する
次の例は、同等クラスを使って file1 中でアクセント記号付きのベース文字 e を認識し、その記号を取り除いて file2 に書き出します。
tr "[=e=]" e <file1 >file2
tr の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。 LANG、 LC_ALL 、LC_COLLATE、LC_CTYPE、LC_MESSAGES、および NLSPATH。
次の終了値が返されます。
入力データはすべて正常に処理されました。
エラーが発生しました。
属性についての詳細は、attributes(5) を参照してください。
|
|
|
ed(1), sed(1), sh(1), tolower(3C), toupper(3C), ascii(5), attributes(5), environ(5), largefile(5), regex(5), standards(5)
以前のバージョンとは違って、/usr/xpg4/bin/tr は入力ストリーム中の NUL 文字を正しく処理します。NUL 文字は tr -d '\000' によって取り除くことができます。