Next: , Up: tr invocation


9.1.1 文字の組の指定

set1set2の引数の書式は,正規表現の書式に似ています.しか し正規表現ではなく,文字のリストのみです.これらの文字列のほとんどの文 字は単にその文字自身を表しますが,利便性のため,文字列には以下でリスト アップされた速記を含むことができます.そのうち,以下で注意する set1またはset2のみでしか利用できないものもあります.

バックスラッシュエスケープ
以下でリストアップされていない,文字が続くバックスラッシュは,エラーメッ セージを発生します.
\a
Control-G.
\b
Control-H.
\f
Control-L.
\n
Control-J.
\r
Control-M.
\t
Control-I.
\v
Control-K.
\ooo
oooで与えられる値の文字で,一桁から三桁までの八進数.
\\
バックスラッシュ.

範囲
表記方法の‘m-n’は,mからnまで昇順に,全て の文字に展開されます.mは,対照でnの前であるべきです.そう でない場合,結果としてエラーとなります.例としては,‘0-9’は ‘0123456789’と同じです.

gnu trは,範囲を囲む角括弧を使用するSystem V構文をサポー トしません.その書式で指定された変換は,括弧はそれ自身に変換されるので, 期待したように動作します.しかし,期待しない動作を行なうときもあるので 避けるべきです.例えば,‘tr -d '[0-9]'’は数字だけでなく括弧も削除 します.

多くの歴史的に一般的なものと,範囲の使用の受け入れには移植性がありませ ん.例えば,EBCDICのホストでは,‘A-Z’の範囲を使用すると, ASCIIでは‘A’から‘Z’までが不連続なので期待したよう に動作しません.POSIXに準拠しているバージョンのtr に依存している場合,これを回避する最善の方法は,文字クラスを使用するこ とです(以下を参照して下さい).それ以外では,範囲内のメンバーを列挙する ことが最も移植性がある(そして最も醜い)方法です.

繰り返される文字
set2での‘[c*n]’の表記は,文字cn個 のコピーに展開されます.このため,‘[y*6]’は‘yyyyyy’と同じで す.set2での‘[c*]’の表記は,set2set1と 同じ長さにするのに必要なたくさんのcのコピーに展開されます. nが‘0’で始まる場合は八進数に,それ以外では十進数だと解釈さ れます.
文字クラス
[:class:]’の表記は,(あらかじめ定義された)クラス class にある全ての文字に展開されます.文字は,特定の順序で展開さ れませんが,upperlowerクラスは,昇順に展開されます. --delete (-d)と--squeeze-repeats (-s)オプションが両方与えられている場合,すべての文字クラスを set2で使用することが可能です.それ以外の場合,文字クラス lowerupperset2に適用され,さらに,対応する(そ れぞれupperlowerの)文字クラスがset1の位置に相対 的に同じものが指定されている場合だけそうなります.これは,大文字小文字 の変換の指定です.クラス名は以下で与えられます.無効なクラス名が与えら れた場合,結果としてエラーとなります.
alnum
文字と数字.
alpha
文字.
blank
水平方向の空白.
cntrl
コントロール文字.
digit
数字.
graph
スペースを含まない,印刷可能な文字.
lower
小文字.
print
スペースを含む,印刷可能な文字.
punct
句読点文字.
space
水平垂直の空白.
upper
大文字.
xdigit
16進数の数字.

等価なクラス
構文‘[=c=]’は,cと等価な文字の全てに,特定の順序を持 たずに展開されます.等価なクラスは,英語以外のアルファベットをサポート する目的で,比較的最近発明されました.しかし,それらの定義や内容を決定 する標準的な方法はなさそうです.そのため,gnu trでは, 完全には実装されていません.それぞれの文字の等価クラスは,その文字から のみ構成されていて,特定の利用価値はありません.