スポンサーリンク

TR(1) FreeBSD 一般コマンドマニュアル TR(1)

名称

tr − 文字の置換

書式

tr [−Ccsu] string1 string2

tr [−Ccu] −d string1

tr [−Ccu] −s string1

tr [−Ccu] −ds string1 string2

解説

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

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

       −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 進数シーケンスの場合、コード化された値の 範囲を表します。この範囲は、両端を含みます。

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

[: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) の記述通り に、 tr の実行に影響します。

使用例

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

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

tr -cs "[:alpha:]" "\n" < file1

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

tr "[:lower:]" "[:upper:]" < file1

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

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

tr -cd "[:print:]" < file1

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

tr "[=e=]" "e"

診断

ユーティリティ tr は、成功すると 0 で、エラーがあった場合は >0 で終了しま す。

互換性

以前の FreeBSD における tr の実装では、現在のロケールの参照順序に従って範 囲式中の文字を順序づけませんでした。このため (英語のテキストのように) ア クセントがつけられていない Latin 文字を、 UNIX の伝統的な慣用句である ‘‘tr A-Z a-z’’ を用いて大文字から小文字へと変換する事ができました。しか し、現在の tr はロケールの参照順序に従うので、大文字と小文字の間に 1:1 の マッピングが存在しない場合や大文字と小文字で文字の順序が異なる場合は、こ の慣用句は正しい結果を生成しません。上記の 使用例セクションに書かれてるよ うに、 ‘‘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’’ と書き直す必要があります。

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

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

規格

tr ユーティリティは、 IEEE Std 1003.1-2001 (‘‘POSIX.1’’) に適合していま す。

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

FreeBSD 10.0 July 23, 2004 FreeBSD 10.0

スポンサーリンク