1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
|
.\" You may copy, distribute and modify under the terms of the LDP General
.\" Public License as specified in the LICENSE file that comes with the
.\" gnumaniak distribution
.\"
.\" The author kindly requests that no comments regarding the "better"
.\" suitability or up-to-date notices of any info documentation alternative
.\" is added without contacting him first.
.\"
.\" (C) 2002 Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com>
.\"
.\" GNU tr man page
.\" man pages are NOT obsolete!
.\" <ragnar@ragnar-hojland.com>
.\"
.\" Japanese Version Copyright (c) 2000 NAKANO Takeo all rights reserved.
.\" Translated Sun 12 Mar 2000 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
.\"
.TH TR 1 "7 October 2002" "GNU textutils 2.1"
.SH 名前
tr \- 文字の変換・削除や、連続する文字の圧縮を行う
.SH 書式
.B tr
.RB [ \-cdst\ ]
.RB [ \-\-complement ]
.RB [ \-\-delete ]
.RB [ \-\-squeeze\-repeats ]
.RB [ \-\-truncate\-set1 ]
.\"nakano error!
.\" .IR FILE1 " [" FILE2 ]
.IR SET1 " [" SET2 ]
.BR tr " [" \-\-help "] [" \-\-version ]
.SH 説明
.B tr
は標準入力を標準出力にコピーし、その際に以下のうちのいずれかを行う。
.IP \(bu 2
文字を変換し、オプションで指定すればさらに連続する文字を圧縮
(squeeze) する。
.IP \(bu
連続する文字を圧縮する。
.IP \(bu
文字を削除する。
.IP \(bu
文字を削除してから、連続する文字を圧縮する。
.PP
\fISET1\fP および (与えられていれば) \fISET2\fP 引き数は、
文字の順序付きセットを定義する。
.\"nakano: 意味なし(^^;
.\" 以下の説明ではこれを \fISET1\fP および \fISET2\fP と呼ぶ。
これらの文字セットが入力に存在すると、
.B tr
はその文字に対して動作を行う。
.\"nakano: 以下は冗長な気が...
.\" .I \-c
.\" オプションは \fISET\fP をその補集合
.\" (\fISET1\fP に含まれない文字すべて) に置換する。
.SH オプション
.TP
.B \-c, \-\-complement
\fISET1\fR を、 \fISET1\fR 自身の補集合
(\fISET1\fR に含まれない文字すべて) で置き換える。
.TP
.B \-d, \-\-delete
\fISET1\fP にある入力文字を削除する。変換しない。
.TP
.B \-s, \-\-squeeze\-repeats
同じ文字の繰り返しを 1 文字に置き換える。
この操作は変換や削除のあとに行われる。
\fISET1\fP にある文字の繰り返しを、その文字 1 文字に置き換える。
.TP
.B \-t, \-\-truncate\-set1
変換を行う前に、まず \fISET1\fP を \fISET2\fP の長さに切り詰める。
.TP
.B "\-\-help"
標準出力に使用方法のメッセージを出力して正常終了する。
.TP
.B "\-\-version"
標準出力にバージョン情報を出力して正常終了する。
.SH 文字セットの指定
\fISET1\fP および \fISET2\fP 引き数のフォーマットは
正規表現と似たものになっている。しかし正規表現そのものではなく、
実は文字の並びに過ぎない。
これらの文字列の中に記された文字は、ほとんどの場合はその文字自身を指す。
文字列には便宜上以下のような短縮形を用いることもできる。
ただし \fISET1\fP または \fISET2\fP のいずれかにしか
用いることのできないものもある (このようなものには注記がされている)。
.SS バックスラッシュを用いたエスケープ
.RS
.TP
.B \ea
Control\-G
.TP
.B \eb
Control\-H
.TP
.B \ef
Control\-L
.TP
.B \en
Control\-J
.TP
.B \er
Control\-M
.TP
.B \et
Control\-I
.TP
.B \ev
Control\-K
.TP
.B \e\fIOOO
\fIOOO\fP (1〜3 桁の 8 進数) によって指定される文字
.TP
.B \e\e
バックスラッシュ文字
.PP
.SS 範囲指定
`\fIM\fR\-\fIN\fR' といった表記は、
\fIM\fP から \fIN\fP までのすべての文字を昇順に展開した文字列になる。
\fIM\fP は照合順序中で \fIN\fP の前になければならず、
これに反した場合はエラーとなる。
例えば `0\-9' は`0123456789' を指定したのと同じことになる。
System V 版の
.B tr
では範囲を指定する際に角括弧 `[]' を用いるが、
GNU 版
.BR tr
ではこの形式はサポートしていない。
ただしこの形式における変換指定は
\fISET1\fP と \fISET2\fP の間で角括弧が対応していればちゃんと動作する。
.SS 繰り返し文字
\fISET2\fP における `\fB[\fIC\fP*\fIN\fB]\fR' といった表記は
\fIN\fP 個の文字 \fIC\fP に展開される。
したがって `[y*6]' は `yyyyyy' になる。
\fISET2\fP における `[\fIC\fP*]' は \fISET2\fP を \fISET1\fP
と同じ長さにするために必要な個数の文字 \fIC\fP に展開される。
\fIN\fP が 0 ではじまる場合は 8 進数とみなされ、
それ以外の場合は 10 進数とみなされる。
.SS 文字クラス
`\fB[:\fICLASS\fB:]\fR' といった表記は、
あらかじめ定義された文字クラス \fICLASS\fP のすべての文字に展開される。
文字クラスには特定の順序は定義されていない。
ただし `upper' と `lower' クラスのみは例外で、昇順に展開される。
.BR \-\-delete " (" \-d )
および
.BR \-\-squeeze\-repeats " (" \-s )
の両方が指定された場合は、
\fISET2\fP にはどんな文字クラスでも用いることができる。
それ以外の場合は、 \fISET2\fP に指定できるのは `lower' および `upper' のみで、
しかもそれぞれに対応するクラス
(`lower' には `upper'、 `upper' には `lower') が
\fISET1\fP の同じ位置に指定されていなければならない。
この場合は大文字小文字が変換される。
文字クラス名を以下に示す。
これら以外の名前が指定された場合にはエラーとなる。
.RS
.TP
.B alnum
英文字と数字
.TP
.B alpha
英文字
.TP
.B blank
水平方向の空白 (Horizontal whitespace)
.TP
.B cntrl
制御文字
.TP
.B digit
数字
.TP
.B graph
印刷できる文字 (空白は含まない)
.TP
.B lower
英小文字
.TP
.B print
印刷できる文字 (空白も含む)
.TP
.B punct
句読点
.TP
.B space
水平および垂直方向の空白
.TP
.B upper
英大文字
.TP
.B xdigit
16 進数の文字
.PP
.SS 等価クラス
`\fB[=\fIC\fB=]\fR' といった表記は、
\fIC\fP と等価な文字に展開される。このとき順序は定義されない。
等価クラスは、英語以外のアルファベットをサポートするために
最近発明されたものである。
しかし現在のところこれらの定義や内容指定に標準的な方法はないようである。
したがって GNU 版
.BR tr
でも完全には実装されていない。
それぞれの文字の等価クラスはその文字からのみ構成されている。
したがってこの機能は現在のところ役に立たない。
.SH 変換
.B tr
は \fISET1\fP と \fISET2\fP の両方が指定されていて、
.BR \-\-delete " (" \-d )
オプションが指定されていない場合には変換を行う。
.B tr
は入力のうち \fISET1\fR にある文字を
\fISET2\fR の対応する位置にある文字に変換する。
\fISET1\fR に無い文字はそのまま出力される。
もし文字が \fISET1\fR に 2 回以上現われ、
\fISET2\fR の対応する文字がすべて同じでない場合には、
最後の文字だけが使われる。例えば以下の二つのコマンドは等価である:
.sp
.RS
.nf
tr aaa xyz
tr a z
.fi
.RE
.sp
.B tr
の良くある使い方としては、英小文字の大文字への変換があげられる。
いろいろなやり方が可能であるが、以下に例を 3 つ示す。
.sp
.RS
.nf
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a\-z A\-Z
tr '[:lower:]' '[:upper:]'
.fi
.RE
.sp
.B tr
が変換を行う際には、 \fISET1\fR と \fISET2\fR は通常同じ長さでなければならない。
\fISET1\fR が \fISET2\fR より短い場合には、 \fISET2\fR の尾部の余りは無視される。
逆に \fISET1\fR を \fISET2\fR より長く指定すると、動作は予測できなくなる。
POSIX.2 によれば、結果は定義されない。
このような場合、 BSD 版
.B tr
では \fISET2\fR の足りない部分を最後の文字で埋め、 \fISET1\fR と同じ長さにする。
また System V 版
.B tr
は \fISET1\fR の尾部を切り捨てて \fISET2\fR と同じ長さにする。
デフォルトでは GNU 版
.B tr
は BSD 版
.B tr
と同じように振る舞う。
また \-\-truncate\-set1 (\fI\-t\fP) オプションが指定された場合には、
GNU 版
.B tr
は System V 版
.B tr
のように振る舞う。このオプションは変換以外の点に関しては無視される。
System V 版
.B tr
的な振る舞いの下では、 BSD 版の有名な用法:
.sp
.RS
.nf
tr \-cs A\-Za\-z0\-9 '\e012'
.fi
.RE
.sp
は使えなくなる。これはアルファベット文字および数字以外の文字を改行文字
に置換するものであるが、 System V では内容が 0 のバイト
(\fISET1\fR の補集合の先頭要素) のみを変換することになる。
.SH 繰り返しの圧縮と削除
.BR \-\-delete " (" \-d )
オプションだけが指定された場合は、
.B tr
は入力のうち \fISET1\fR にある文字を削除する。
.BR \-\-squeeze\-repeats " (" \-s )
オプションだけが指定された場合には、
.B tr
は入力のうち、 \fISET1\fR にある文字の繰り返しを、その文字 1 文字に置き換える。
.BR \-\-delete " と " \-\-squeeze\-repeats
の両方のオプションが指定された場合には、
.B tr
はまず \fISET1\fR にある文字を削除し、
残りのうち \fISET2\fR にある文字の繰り返しを圧縮する。
.B \-\-squeeze\-repeats
オプションは変換と共に用いることもできる。この場合には
.B tr
はまず変換を行い、残りの文字のうち \fISET2\fR にあるものを圧縮する。
以下にこれらのオプションを組み合わせた利用例を示す:
\fB\(bu\fR 内容が 0 のバイトを削除する:
.sp
.RS
.nf
tr \-d '\e000'
.fi
.RE
.sp
\fB\(bu\fR すべての単語をそれ自身のみからなる行に変換する。
つまりアルファベット文字、数字以外の文字を改行文字に変換し、
改行文字の繰り返しを一つの改行文字に圧縮する:
.sp
.RS
.nf
tr \-cs '[a\-zA\-Z0\-9]' '[\en*]'
.fi
.RE
.sp
\fB\(bu\fR 改行文字の繰り返しを一つの改行文字に変換する。
.sp
.RS
.nf
tr \-s '\en'
.fi
.RE
.sp
\fB\(bu\fR 文書中の同じ単語の連続を見つける。例えば
"the the" のように、改行を挟んで単語をダブって書いてしまうことがよくある。
以下の bourne シェルスクリプトは、まず句読点や空白の連続を改行に変換する。
これによって、各「単語」は、それぞれ自分自身だけからなる行に置かれる。
次に大文字を小文字に変換し、最後に
.BR uniq (1)
を
.B \-d
オプションで起動して、連続した同じ単語だけを表示する。
.sp
.RS
.nf
#!/bin/sh
cat "$@" \e
| tr \-s '[:punct:][:blank:]' '\en' \e
| tr '[:upper:]' '[:lower:]' \e
| uniq \-d
.fi
.RE
.sp
.SH 移植性
環境変数
.B POSIXLY_CORRECT
を指定すると、 POSIX.2 との厳密な互換性をとるために、
警告およびエラーメッセージのいくつかが出力されなくなる。
指定しなければ、以下のような場合にメッセージが出る。
.IP 1. 3
.B \-\-delete
オプションが指定されているが
.B \-\-squeeze\-repeats
が指定されておらず、かつ \fISET2\fP が与えられている場合には、GNU 版
.B tr
はデフォルトでは使用法のメッセージを表示して終了する。
なぜならこのとき \fISET2\fP は利用されないからである。
しかし POSIX 規格によれば、
この場合は \fISET2\fP は単に無視されなければならない。
引き数を黙って無視するのは良くない仕様だと思うのだが。
.IP 2.
あいまいな 8 進数エスケープが指定された場合。例えば `\e400' は実際に
は \e40 と数字 0 の並びと解釈される。
なぜなら 8 進数の 400 に対応するバイトは存在しないからである。
.PP
GNU 版
.B tr
は BSD や System V と互換ではない。
例を挙げれば、 POSIX 定義にある `[:alpha:]', `[=c=]', `[c*10]'
といった指定の解釈を止めさせるようなオプションは存在しない。
また GNU 版
.B tr
は内容が 0 のバイトを自動的には削除しない。
一方これまでの UNIX 版では、このバイトを残す方法の方が存在しない。
.SH 注意
プログラムのバグについては bug-textutils@gnu.org に報告してください。
.br
man ページは Ragnar Hojland Espinosa <ragnar@ragnar-hojland.com> が作成しました。
|