Scroll to navigation

TR(1) General Commands Manual TR(1)

名前

tr - 文字を変換、消去する

書式

tr [-cst] [--complement] [--squeeze-repeats] [--truncate-set1] string1 string2
tr {-s,--squeeze-repeats} [-c] [--complement] string1
tr {-d,--delete} [-c] string1
tr {-d,--delete} {-s,--squeeze-repeats} [-c] [--complement] string1 string2

GNU 版 tr は --help および --version オプションも受け付ける。

説明

この文書はもうメンテナンスされていないので、不正確・不完全 な可能性がある。現在は texinfo 文書が正式な情報となっている。

このマニュアルページは GNU 版 tr について記述したものである。 tr は標準入力を標準出力にコピーするが、その際に以下のうちのいずれかを行う。

• 文字を変換し、オプションで指定すればさらに連続する文字を圧縮 (squeeze) する。
• 連続する文字を圧縮する。
• 文字を削除する。
• 文字を削除してから、連続する文字を圧縮する。

string1 および (与えられていれば) string2 引き数は順序を持っ た文字のセットを定義する。以下の説明ではこれを set1 および set2 と呼ぶ。 これらの文字セットが入力に存在すると、 tr はその文字に対して動作を行う。 --complement (-c) オプションは set1 をその補集合 (set1 に含まれない文字すべ て) に置換する。

文字セットの指定

string1 および string2 引き数のフォーマットは正規表現と似 たものになっている。しかし正規表現そのものではなく、実は文字の並びに 過ぎない。これらの文字列の中に記された文字は、ほとんどの場合はその文字 自身を指す。文字列には便宜上以下のような短縮形を用いることもできる。た だし、 string1 または string2 のいずれかにしか用いることの できないものもある。記述に注意すること。

バックスラッシュによるエスケープ。以下以外の文字がバックスラッシュに続 いた場合はエラーメッセージが出る。

Control-G
Control-H
Control-L
Control-J
Control-M
Control-I
Control-K
ooo (1〜3 桁の 8 進数) によって指定される文字。
\\
バックスラッシュ文字。

範囲指定。 `m-n' といった記述は、 m から n ま でのすべての文字を昇順に展開した文字列になる。 mn の前 になければならず、これに反した場合はエラーとなる。例えば `0-9' は `0123456789' を指定したのと同じことになる。 System V 版の tr では範囲を指定する際に角括弧 `[]' を用いるが、 GNU 版 tr ではこの形式はサポートしていない。ただしこの形式における変換指定は string1 と string2 の間で角括弧が対応していれば有効である。

繰り返し文字。 string2 における `[c*n]' といった記述 は n 個の文字 c に展開される。したがって `[y*6]' は `yyyyyy' になる。 string2 における `[c*]' は set2 を set1 と同じ長さにするために必要な個数の文字 c に展開される。 n が 0 ではじまる場合は 8 進数とみなされ、それ以外の場合は 10 進 数とみなされる。

文字クラス。 `[:class-name:]' といった記述はあらかじめ定義された 文字クラス class-name のすべての文字に展開される。文字クラスには 特定の順序は定義されていない。ただし `upper' と `lower' クラスのみは例 外で、昇順に展開される。 --delete (-d) および --squeeze-repeats (-s) の両方が指定された場合は、 string2 にはどんな文字ク ラスでも用いることができる。それ以外の場合は、 string2 に指定で きるのは `lower' および `upper' のみで、しかもそれぞれに対応するクラス (`lower' には `upper'、 `upper' には `lower') が string1 の同じ 位置に指定されていなければならない。この場合は大文字小文字が変換される。 文字クラス名を以下に示す。これら以外の名前が指定された場合にはエラーと なる。

文字と数字。
文字。
水平方向の空白 (Horizontal whitespace)。
コントロール文字。
数字。
印刷できる文字。空白は含まない。
小文字。
印刷できる文字。空白も含む。
句読点。
水平および垂直方向の空白
大文字
16 進数の文字

等価クラス。 `[=c=]' といった記述は c と等価な文字に展開さ れる。このとき順序は定義されない。等価クラスは英語以外のアルファベット をサポートするために最近発明されたものである。しかし現在のところこれら の定義や内容指定に標準的な方法はないようである。したがって GNU 版 tr でも完全には実装されていない。それぞれの文字の等価クラスはその文字から のみ構成されている。したがってこの機能は現在のところ役に立たない。

変換

trstring1string2 の両方が指定されていて、 --delete (-d) オプションが指定されていない場合には変換を行う。 tr は入力のうち set1 にある文字を set2 の対応する位置にある文字に変換する。 set1 に無い文字はそのまま出力される。もし文字が set1 に2回以上現われ、 set2 の対応する文字がすべて同じでない場合には、最後の文字だけが使われ る。例えば以下の二つのコマンドは等価である:

tr aaa xyz
tr a z

tr の良く用いられる使用法としては、小文字の大文字への変換があげられる。い ろいろなやり方が可能であるが、以下に例を3つほど示す。

tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'

tr が変換を行う際には、 set1 と set2 は通常同じ長さでなければならない。 set1 が set2 より短い場合には、 set2 の尾部の余りは無視される。

逆に set1 を set2 より長く指定すると、動作は予測できなくなる。 POSIX.2 によれば、結果は定義されない。このような場合、 BSD 版 tr では set2 の足りない部分を最後の文字で埋め、 set1 と同じ長さにする。 また System V 版 tr は set1 の尾部を切り捨てて set2 と同じ長さにする。

デフォルトでは GNU 版 tr は BSD 版 tr と同じように振る舞う。 また --truncate-set1 (-t) オプションが指定された場合には、 GNU 版 tr は System V 版 tr のように振る舞う。このオプションは変換以外の点に関しては無視される。

System V 版 tr 的な振る舞いの下では、 BSD 版の有名な用法:

tr -cs A-Za-z0-9 '\012'
は使えなくなる。これはアルファベット文字および数字以外の文字を改行文字 に置換するものであるが、 System V では内容が 0 のバイト (set1 の補集 合の先頭要素) のみを変換することになる。

繰り返しの圧縮と削除

--delete (-d) オプションだけが指定された場合は、 tr は入力のうち set1 にある文字を削除する。

--squeeze-repeats (-s) オプションだけが指定された場合には、 tr は入力のうち、 set1 にある文字の繰り返しを、その文字 1 字に置き換える。

--delete と --squeeze-repeats の両方のオプションが指定された場合 には、 tr はまず set1 にある文字を削除し、残りのうち set2 にある文字の繰り返しを 圧縮する。

The --squeeze-repeats オプションは変換と共に用いることもできる。この 場合には tr はまず変換を行い、残りの文字のうち set2 にあるものを圧縮する。

以下にこれらのオプションの組み合わせの利用例を示す:

内容が 0 のバイトを削除する:

tr -d '\000'

すべての単語をそれ自身のみからなる行に変換する。以下はアルファベット文 字、数字以外の文字を改行文字に変換し、改行文字の繰り返しを一つの改行文 字に圧縮する:

tr -cs '[a-zA-Z0-9]' '[\n*]'

改行文字の繰り返しを一つの改行文字に変換する。

tr -s '\n'

GNU 版 tr は、以下のオプションも (他のどんなオプションとの組み合わせでも) 受け付ける。

使い方に関するメッセージを標準出力に表示し、実行成功を返して終了する。
バージョン情報を標準出力に表示して終了する。

警告メッセージ

環境変数 POSIXLY_CORRECT を指定すると、 POSIX.2 との厳密な互換性を保証 するために、警告およびエラーメッセージのいくつかが出力されなくなる。通 常ならば以下のような状況で出るメッセージである。

1. --delete オプションが指定されており、 --squeeze-repeats が指定されておらず、かつ string2 が与えられている場合には、 GNU 版 tr はデフォルトでは使用法のメッセージを表示して終了する。なぜならこのとき string2 は利用されないからである。しかし POSIX 規格によれば、こ の場合は string2 は単に無視されなければならない。しかし引き数を 黙って無視するのは良くない仕様だと思うのだが。

2. あいまいな 8 進数エスケープが指定された場合。例えば \400 は実際に は \40 と数字 0 の並びと解釈される。なぜなら 8 進数の 400 が対応する バイトは存在しないからである。

GNU 版 tr は BSD や System V との互換性は保証していないことに注意すること。例を 挙げれば、 POSIX 定義にある [:alpha:] や [=c=]、 [c*10] といった指定の 解釈を止めさせるようなオプションは存在しない。また GNU 版 tr は内容が 0 のバイトを自動的には削除しない。一方これまでの UNIX 版では、 このバイトを残す方法の方が存在しない。

GNU Text Utilities FSF