TR

Section: User Commands (1)
索引 jman

BSD mandoc
 

索引

名称

tr - 文字の置換  

索引

書式

[-Ccsu ] string1 string2 [-Ccu ] -d string1 [-Ccu ] -s string1 [-Ccu ] -ds string1 string2  

索引

解説

ユーティリティは、選択された文字を置き換え、または削除しながら 標準入力を標準出力にコピーします。

以下のオプションが利用できます:

-C
string1 に含まれる文字の補集合を表します。 つまり ``-C ab '' は、 `a' と `b' を除く全ての文字を含みます。
-c
-C と同じですが、 string1 に含まれる値の補集合となります。
-d
入力から、 string1 に含まれる文字を削除します。
-s
最後の引数 ( string1string2 のどちらか) に含まれている同一の文字が、入力の中に連続して現れるとき、 それを 1 つの文字に圧縮します。 この圧縮は、全ての削除や変換が終わった後に行われます。
-u
出力がバッファリングされないことを保証します。

書式の最初の形式では、 string1 に含まれる文字は、 string1 の 1 文字目は string2 の 1 文字目と置き換え...というように string2 に置き換えられます。 もし string1string2 よりも長い場合は、 string2 の最後の文字が、 string1 と対応させるのに足りない分だけ続いているものとみなされます。

書式の 2 番目の形式では、 string1 に含まれる文字は、入力から削除されます。

書式の 3 番目の形式では、 string1 に含まれる文字は、 -s オプションの解説の通りに圧縮されます。

書式の 4 番目の形式では、 string1 に含まれる文字は入力から削除され、 string2 に含まれる文字は -s オプションの解説の通りに圧縮されます。

string1 string2 の文字の集合を指定するのに、以下のような記述方法が利用できます:

character
以下で示したものを除く、その文字自身を表す 通常の文字 (キャラクタ) です。
\octal
バックスラッシュに続き、1〜3 桁の 8 進数が続いたものは、 その値を符号化した文字を表現します。 この 8 進数の並びに続いて 数字を文字として指定したい場合には、8 進数の並びが 3 桁と なるように、8 進数の上位桁 (左) に 0 を埋めてください。
\character
バックスラッシュに続く、特定の特殊な文字は、特殊な値に対応しています。

"\a    <ベル文字>
"\b <バックスペース>
"\f   <フォームフィード>
"\n <改行>
"\r     <復帰>
"\t<水平タブ>
"\v<垂直タブ>

これら以外のバックスラッシュに続く文字は、その文字自身に対応します。

c-c
範囲の両端を非 8 進数で指定すると、文字の範囲を表します。 この範囲は、両端を含む、照合順序で定義された昇順のものです。 片方もしくは両方の端点が 8 進数シーケンスの場合、 コード化された値の範囲を表します。 この範囲は、両端を含みます。

Bf Em 現在の実装による範囲式の解釈が、以前の実装と違う事に関する重要な注記は、 以下の 互換性 セクションを参照してください。 Ef

[:class:]
定義された文字クラスに属する、全ての文字を表します。 クラス名は以下の通りです:

"alnum <英数字>
"alpha        <英字>
"cntrl  <コントロール文字>
"digit      <数字>
"graph  <グラフィック文字>
"lower<英小文字>
"print<表示可能文字>
"punct<句読点>
"space<空白文字>
"upper<英大文字>
"xdigit<16進数>

``[:lower:] '' が
string1 に登場し、 ``[:upper:] '' が string2 で相対的に同じ位置に登場する場合、現在のロケールにおける LC_CTYPE カテゴリでの toupper マッピングの文字列ペアを表現します。 ``[:upper:] '' が string1 に登場し、 ``[:lower:] '' が string2 で相対的に同じ位置に登場する場合、現在のロケールにおける LC_CTYPE カテゴリでの tolower マッピングの文字列ペアを表現します。

大文字小文字の変換の例外を除けば、クラス内の文字の順序は特定されていません。

どのような ASCII 文字が、これらのクラスに含まれているのかという情報を 調べたい場合には、 ctype(3) および関連マニュアルを参照してください。

[=equiv=]
equiv と同じ同値関係クラスに属する全ての文字を表します。 これらはエンコード値の順序となります。
[#*n]
# で指定された n 個の文字の繰り返しを表現します。 この表現は、 string2 で指定されたときのみ有効です。 もし n が省略された場合、または 0 の場合は、 string2string1 の長さを満たすような、十分大きな値として解釈されます。 n は、0 で始まる場合には 8 進数として、そうでない場合には 10 進数として 解釈されます。

 

索引

環境変数

LANG , LC_ALL , LC_CTYPE LC_COLLATE の環境変数が、 environ(7) の記述通りに、 の実行に影響します。  

索引

使用例

以下の例は、シェルに対して与えられたものです:

file1 に含まれる単語 (文字の最大長の並び) のリストを、 各行につき 1 つずつ出力します。

file1 の内容を大文字に変換します。

(これはすべてのロケールで正しく動作するため、 UNIX の伝統的な慣用句である ``tr a-z A-Z '' よりも好ましいです)

表示できない文字を file1 から削除します。

発音区分記号を、 `e' のアクセント付きバリアントすべてから削除します。

"tr [=e=] e"
 

索引

診断

Ex -std  

索引

互換性

以前の Fx における の実装では、現在のロケールの参照順序に従って範囲式中の文字を 順序づけませんでした。 このため (英語のテキストのように) アクセントがつけられていない Latin 文字を、 UNIX の伝統的な慣用句である ``tr A-Z a-z '' を用いて大文字から小文字へと変換する事ができました。 しかし、現在の はロケールの参照順序に従うので、 大文字と小文字の間に 1:1 のマッピングが存在しない場合や 大文字と小文字で文字の順序が異なる場合は、 この慣用句は正しい結果を生成しません。 上記の Sx 使用例 セクションに書かれてるように、 ``a-z '' と ``A-Z '' のように文字範囲を明示するのではなく、文字クラス式である ``[:lower:] '' と ``[:upper:] '' を使うべきでしょう。

古くからの BSD の実装および POSIX 標準では、文字の範囲指定には ``c-c '' という文法を用いますが、古い System V の実装では ``[c-c] '' を用いています。 System V のシェルスクリプトは、文字の置換を行おうとする 場合にはうまく動作するはずです。 つまり、 ``tr [a-z] [A-Z] '' と指定した場合には、 string1 の `[' が string2 の `[' に変換されるため、うまく動作します。 しかし、シェルスクリプトが、 ``tr -d [a-z] '' というコマンドのように文字の削除や圧縮を行う場合には、 `[' と `]' の文字が削除や圧縮の対象に含まれてしまいます。 古い実装の System V ではこのようには動作しません。 さらに、 `a' , `-' , `z' という 3 つの文字を表現するのに、 ``a-z '' と記述するような、その並びに依存しているあらゆるスクリプトは、 ``a\-z '' と書き直す必要があります。

ユーティリティは昔から、入力における NUL バイトの操作を 禁止されていました。 さらに、入力から NUL を取り除いていました。 この実装では、この振る舞いはバグとみなされ、削除されました。

ユーティリティは昔から、たとえば、2 つの文字列が指定されない限り -c および -s オプションを無視する、などの文法上の誤りを極端なまでに許していました。 この実装では、不正な文法は許されなくなっているはずです。  

索引

規格

ユーティリティは、 St -p1003.1-2001 に適合しています。

string2string1 よりも短い場合に string2 の最後の文字が複製される機能は、 POSIX では許されていますが必須ではないことに注意して下さい。 他の POSIX システムへの可搬性のあるシェルスクリプトを 作ろうとするならば、この振る舞いを当てにせずに、 ``[#*] '' という表現を使うべきです。 -u オプションは St -p1003.1-2001 標準の拡張です。


 

索引

Index

名称
書式
解説
環境変数
使用例
診断
互換性
規格

jman



Time: 07:06:20 GMT, January 12, 2009