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 のいずれかにしか用いることの できないものもある。記述に注意すること。
バックスラッシュによるエスケープ。以下以外の文字がバックスラッシュに続 いた場合はエラーメッセージが出る。
- \a
- Control-G
- \b
- Control-H
- \f
- Control-L
- \n
- Control-J
- \r
- Control-M
- \t
- Control-I
- \v
- Control-K
- \ooo
- ooo (1〜3 桁の 8 進数) によって指定される文字。
- \\
- バックスラッシュ文字。
範囲指定。 `m-n' といった記述は、 m から n ま でのすべての文字を昇順に展開した文字列になる。 m は n の前 になければならず、これに反した場合はエラーとなる。例えば `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 の同じ 位置に指定されていなければならない。この場合は大文字小文字が変換される。 文字クラス名を以下に示す。これら以外の名前が指定された場合にはエラーと なる。
- alnum
- 文字と数字。
- alpha
- 文字。
- blank
- 水平方向の空白 (Horizontal whitespace)。
- cntrl
- コントロール文字。
- digit
- 数字。
- graph
- 印刷できる文字。空白は含まない。
- lower
- 小文字。
- 印刷できる文字。空白も含む。
- punct
- 句読点。
- space
- 水平および垂直方向の空白
- upper
- 大文字
- xdigit
- 16 進数の文字
等価クラス。 `[=c=]' といった記述は c と等価な文字に展開さ れる。このとき順序は定義されない。等価クラスは英語以外のアルファベット をサポートするために最近発明されたものである。しかし現在のところこれら の定義や内容指定に標準的な方法はないようである。したがって GNU 版 tr でも完全には実装されていない。それぞれの文字の等価クラスはその文字から のみ構成されている。したがってこの機能は現在のところ役に立たない。
変換¶
tr は string1 と string2 の両方が指定されていて、 --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'
繰り返しの圧縮と削除¶
--delete (-d) オプションだけが指定された場合は、 tr は入力のうち set1 にある文字を削除する。
--squeeze-repeats (-s) オプションだけが指定された場合には、 tr は入力のうち、 set1 にある文字の繰り返しを、その文字 1 字に置き換える。
--delete と --squeeze-repeats の両方のオプションが指定された場合 には、 tr はまず set1 にある文字を削除し、残りのうち set2 にある文字の繰り返しを 圧縮する。
The --squeeze-repeats オプションは変換と共に用いることもできる。この 場合には tr はまず変換を行い、残りの文字のうち set2 にあるものを圧縮する。
以下にこれらのオプションの組み合わせの利用例を示す:
内容が 0 のバイトを削除する:
すべての単語をそれ自身のみからなる行に変換する。以下はアルファベット文 字、数字以外の文字を改行文字に変換し、改行文字の繰り返しを一つの改行文 字に圧縮する:
改行文字の繰り返しを一つの改行文字に変換する。
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 |