.\" This file documents the GNU text utilities. .\" .\" Copyright (C) 1994, 95, 96 Free Software Foundation, Inc. .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of .\" this manual under the conditions for verbatim copying, provided that .\" the entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Permission is granted to copy and distribute translations of this .\" manual into another language, under the above conditions for modified .\" versions, except that this permission notice may be stated in a .\" translation approved by the Foundation. .\" .\" Japanese Version Copyright (c) 1997 NAKANO Takeo all rights reserved. .\" Translated Mon Jul 14 1997 by NAKANO Takeo .\" .TH TR 1 "GNU Text Utilities" "FSF" \" -*- nroff -*- .SH 名前 tr \- 文字を変換、消去する .SH 書式 .B tr [\-cst] [\-\-complement] [\-\-squeeze\-repeats] [\-\-truncate\-set1] string1 string2 .br .B tr {\-s,\-\-squeeze\-repeats} [\-c] [\-\-complement] string1 .br .B tr {\-d,\-\-delete} [\-c] string1 .br .B tr {\-d,\-\-delete} {\-s,\-\-squeeze\-repeats} [\-c] [\-\-complement] string1 string2 .PP GNU 版 .B tr は \-\-help および \-\-version オプションも受け付ける。 .SH 説明 この文書はもうメンテナンスされていないので、不正確・不完全 な可能性がある。現在は texinfo 文書が正式な情報となっている。 .PP このマニュアルページは GNU 版 .BR tr について記述したものである。 .B tr は標準入力を標準出力にコピーするが、その際に以下のうちのいずれかを行う。 .IP \(bu 文字を変換し、オプションで指定すればさらに連続する文字を圧縮 (squeeze) する。 .br \(bu 連続する文字を圧縮する。 .br \(bu 文字を削除する。 .br \(bu 文字を削除してから、連続する文字を圧縮する。 .PP \fIstring1\fP および (与えられていれば) \fIstring2\fP 引き数は順序を持っ た文字のセットを定義する。以下の説明ではこれを set1 および set2 と呼ぶ。 これらの文字セットが入力に存在すると、 .B tr はその文字に対して動作を行う。 .I \-\-complement (\fI\-c\fP) オプションは set1 をその補集合 (set1 に含まれない文字すべ て) に置換する。 .SS 文字セットの指定 .PP \fIstring1\fP および \fIstring2\fP 引き数のフォーマットは正規表現と似 たものになっている。しかし正規表現そのものではなく、実は文字の並びに 過ぎない。これらの文字列の中に記された文字は、ほとんどの場合はその文字 自身を指す。文字列には便宜上以下のような短縮形を用いることもできる。た だし、 \fIstring1\fP または \fIstring2\fP のいずれかにしか用いることの できないものもある。記述に注意すること。 .PP バックスラッシュによるエスケープ。以下以外の文字がバックスラッシュに続 いた場合はエラーメッセージが出る。 .IP \ea Control-G .IP \eb Control-H .IP \ef Control-L .IP \en Control-J .IP \er Control-M .IP \et Control-I .IP \ev Control-K .IP \eooo \fIooo\fP (1〜3 桁の 8 進数) によって指定される文字。 .IP \e\e バックスラッシュ文字。 .PP 範囲指定。 `\fIm\fP\-\fIn\fP' といった記述は、 \fIm\fP から \fIn\fP ま でのすべての文字を昇順に展開した文字列になる。 \fIm\fP は \fIn\fP の前 になければならず、これに反した場合はエラーとなる。例えば `0\-9' は `0123456789' を指定したのと同じことになる。 System V 版の .B tr では範囲を指定する際に角括弧 `[]' を用いるが、 GNU 版 .BR tr ではこの形式はサポートしていない。ただしこの形式における変換指定は string1 と string2 の間で角括弧が対応していれば有効である。 .PP 繰り返し文字。 \fIstring2\fP における `[\fIc\fP*\fIn\fP]' といった記述 は \fIn\fP 個の文字 \fIc\fP に展開される。したがって `[y*6]' は `yyyyyy' になる。 \fIstring2\fP における `[\fIc\fP*]' は set2 を set1 と同じ長さにするために必要な個数の文字 \fIc\fP に展開される。 \fIn\fP が 0 ではじまる場合は 8 進数とみなされ、それ以外の場合は 10 進 数とみなされる。 .PP 文字クラス。 `[:\fIclass-name\fP:]' といった記述はあらかじめ定義された 文字クラス \fIclass-name\fP のすべての文字に展開される。文字クラスには 特定の順序は定義されていない。ただし `upper' と `lower' クラスのみは例 外で、昇順に展開される。 .I \-\-delete (\fI\-d\fP) および .I \-\-squeeze\-repeats (\fI\-s\fP) の両方が指定された場合は、 \fIstring2\fP にはどんな文字ク ラスでも用いることができる。それ以外の場合は、 \fIstring2\fP に指定で きるのは `lower' および `upper' のみで、しかもそれぞれに対応するクラス (`lower' には `upper'、 `upper' には `lower') が \fIstring1\fP の同じ 位置に指定されていなければならない。この場合は大文字小文字が変換される。 文字クラス名を以下に示す。これら以外の名前が指定された場合にはエラーと なる。 .IP alnum 文字と数字。 .IP alpha 文字。 .IP blank 水平方向の空白 (Horizontal whitespace)。 .IP cntrl コントロール文字。 .IP digit 数字。 .IP graph 印刷できる文字。空白は含まない。 .IP lower 小文字。 .IP print 印刷できる文字。空白も含む。 .IP punct 句読点。 .IP space 水平および垂直方向の空白 .IP upper 大文字 .IP xdigit 16 進数の文字 .PP 等価クラス。 `[=\fIc\fP=]' といった記述は \fIc\fP と等価な文字に展開さ れる。このとき順序は定義されない。等価クラスは英語以外のアルファベット をサポートするために最近発明されたものである。しかし現在のところこれら の定義や内容指定に標準的な方法はないようである。したがって GNU 版 .BR tr でも完全には実装されていない。それぞれの文字の等価クラスはその文字から のみ構成されている。したがってこの機能は現在のところ役に立たない。 .SS 変換 .PP .B tr は \fIstring1\fP と \fIstring2\fP の両方が指定されていて、 \-\-delete (\fI\-d\fP) オプションが指定されていない場合には変換を行う。 .B tr は入力のうち set1 にある文字を set2 の対応する位置にある文字に変換する。 set1 に無い文字はそのまま出力される。もし文字が set1 に2回以上現われ、 set2 の対応する文字がすべて同じでない場合には、最後の文字だけが使われ る。例えば以下の二つのコマンドは等価である: .RS .nf tr aaa xyz tr a z .fi .RE .PP .B tr の良く用いられる使用法としては、小文字の大文字への変換があげられる。い ろいろなやり方が可能であるが、以下に例を3つほど示す。 .RS .nf tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ tr a-z A-Z tr '[:lower:]' '[:upper:]' .fi .RE .PP .B tr が変換を行う際には、 set1 と set2 は通常同じ長さでなければならない。 set1 が set2 より短い場合には、 set2 の尾部の余りは無視される。 .PP 逆に set1 を set2 より長く指定すると、動作は予測できなくなる。 POSIX.2 によれば、結果は定義されない。このような場合、 BSD 版 .B tr では set2 の足りない部分を最後の文字で埋め、 set1 と同じ長さにする。 また System V 版 .B tr は set1 の尾部を切り捨てて set2 と同じ長さにする。 .PP デフォルトでは GNU 版 .B tr は BSD 版 .B tr と同じように振る舞う。 また \-\-truncate\-set1 (\fI\-t\fP) オプションが指定された場合には、 GNU 版 .B tr は System V 版 .B tr のように振る舞う。このオプションは変換以外の点に関しては無視される。 .PP System V 版 .B tr 的な振る舞いの下では、 BSD 版の有名な用法: .RS .nf tr -cs A-Za-z0-9 '\e012' .fi .RE は使えなくなる。これはアルファベット文字および数字以外の文字を改行文字 に置換するものであるが、 System V では内容が 0 のバイト (set1 の補集 合の先頭要素) のみを変換することになる。 .SS 繰り返しの圧縮と削除 .PP \-\-delete (\fI\-d\fP) オプションだけが指定された場合は、 .B tr は入力のうち set1 にある文字を削除する。 .PP \-\-squeeze\-repeats (\fI\-s\fP) オプションだけが指定された場合には、 .B tr は入力のうち、 set1 にある文字の繰り返しを、その文字 1 字に置き換える。 .PP \-\-delete と \-\-squeeze\-repeats の両方のオプションが指定された場合 には、 .B tr はまず set1 にある文字を削除し、残りのうち set2 にある文字の繰り返しを 圧縮する。 .PP The \-\-squeeze\-repeats オプションは変換と共に用いることもできる。この 場合には .B tr はまず変換を行い、残りの文字のうち set2 にあるものを圧縮する。 .PP 以下にこれらのオプションの組み合わせの利用例を示す: .PP 内容が 0 のバイトを削除する: .RS tr -d '\e000' .RE .PP すべての単語をそれ自身のみからなる行に変換する。以下はアルファベット文 字、数字以外の文字を改行文字に変換し、改行文字の繰り返しを一つの改行文 字に圧縮する: .RS tr -cs '[a-zA-Z0-9]' '[\en*]' .RE .PP 改行文字の繰り返しを一つの改行文字に変換する。 .RS tr -s '\en' .RE .PP GNU 版 .B tr は、以下のオプションも (他のどんなオプションとの組み合わせでも) 受け付ける。 .TP .I "\-\-help" 使い方に関するメッセージを標準出力に表示し、実行成功を返して終了する。 .TP .I "\-\-version" バージョン情報を標準出力に表示して終了する。 .SS 警告メッセージ .PP 環境変数 POSIXLY_CORRECT を指定すると、 POSIX.2 との厳密な互換性を保証 するために、警告およびエラーメッセージのいくつかが出力されなくなる。通 常ならば以下のような状況で出るメッセージである。 .PP 1. .I \-\-delete オプションが指定されており、 .I \-\-squeeze\-repeats が指定されておらず、かつ \fIstring2\fP が与えられている場合には、 GNU 版 .B tr はデフォルトでは使用法のメッセージを表示して終了する。なぜならこのとき \fIstring2\fP は利用されないからである。しかし POSIX 規格によれば、こ の場合は \fIstring2\fP は単に無視されなければならない。しかし引き数を 黙って無視するのは良くない仕様だと思うのだが。 .PP 2. あいまいな 8 進数エスケープが指定された場合。例えば \e400 は実際に は \e40 と数字 0 の並びと解釈される。なぜなら 8 進数の 400 が対応する バイトは存在しないからである。 .PP GNU 版 .B tr は BSD や System V との互換性は保証していないことに注意すること。例を 挙げれば、 POSIX 定義にある [:alpha:] や [=c=]、 [c*10] といった指定の 解釈を止めさせるようなオプションは存在しない。また GNU 版 .B tr は内容が 0 のバイトを自動的には削除しない。一方これまでの UNIX 版では、 このバイトを残す方法の方が存在しない。