[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9.1.1 文字集合の指定

set1set2 引数の書式は、正規表現の書式に似ているが、 正規表現ではなく、文字のリストにすぎない。 そうした文字列中のほとんどの文字は、単にその文字自身を表しているだけだが、 便宜のため文字列中では以下に列挙する簡易記法も使うことができる。 簡易記法によっては、以下で述べているように、 set1set2 のどちらか一方でしか使えないこともある。

バックスラッシュ・エスケープ

以下のバックスラッシュ・エスケープ・シーケンスを認識する。

\a

Control-G (ベル).

\b

Control-H (バックスペース).

\f

Control-L (フォームフィード).

\n

Control-J (改行).

\r

Control-M (復帰).

\t

Control-I (水平タブ).

\v

Control-K (垂直タブ).

\ooo

1 から 3 桁の 8 進数 ooo によって表される値を持つ 8 ビット文字。 ‘\400’ は、‘\040’ ‘0’ という連続する 2 バイトに解釈されるので、注意すること。

\\

1 個のバックスラッシュ。

上記以外の 1 個の文字がバックスラッシュに続く場合は、その文字として解釈される。 またバックスラッシュには、特別な意味を打ち消す働きもあるので、 ‘[’, ‘]’, ‘*’, ‘-’ をエスケープするのにも使用できる。

範囲指定

m-n’ という表記は、昇順で m から n までのすべての文字に展開される。 m は文字の照合順序で n より前のものでなければならず、 さもないと、エラーになる。たとえば、‘0-9’ は ‘0123456789’ と同じである。

System V の書式では、範囲は、角カッコ (square brackets)を使って囲むことになっているが、 GNU の tr はこの書式をサポートしていない。 System V の書式で指定した場合でも、置換が期待どおり行われることもあるが、 それは、たいていの場合、角カッコが角カッコに置換されるからである。 そうだとしても、予想外の動作をすることもあるので、 角カッコの使用は避けた方がよい。たとえば、‘tr -d '[0-9]'’ は、数字だけでなく、角カッコも削除してしまう。

昔からよく使われている範囲の指定法の多くが — 正しい用法として認められているものでさえ — 他のシステムで使えるとはかぎらない。 たとえば、EBCDIC のホストでは、 ‘A-Z’ という範囲の指定をしても、 たいていの人が予想するような結果は得られないだろう。 なぜなら、そこでは ‘A’ から ‘Z’ までが、ASCII におけるように隣り合ってはいないからである。POSIX 準拠の tr を使うことができるならば、この問題を回避する最善の方法は、文字クラスを使用することである (下記参照)。それができない場合は、範囲の要素を一つ一つ書き込むのが、 一番可搬性のある方法だ (一番野暮ったい方法でもあるけれど)。

文字の繰り返し

set2 における ‘[c*n]’ という表記は、 文字 cn 個の連続に展開される。 従って、‘[y*6]’ は ‘yyyyyy’ と同じである。また、set2 における ‘[c*]’ という表記は、set2set1 と同じ長さにするのに必要な数の c の連続に展開される。 n が ‘0’ で始まっている場合は、 8 進数として扱われる。それ以外の場合は、10 進数である。

文字クラス

[:class:]’ という表記は、(あらかじめ定義されている) 文字クラス class に属するすべての文字に展開される。 展開された文字に特定の順序はないが、upperlower の文字クラスは別で、この二つは、昇順に展開される。 ‘--delete’ (‘-d’) と ‘--squeeze-repeats’ (‘-s’) オプションの両方を指定している場合は、set2 で任意の文字クラスを使用することができる。 それ以外の場合 set2 で使えるのは、lowerupper の文字クラスだけであり、それも、対応する文字クラスを (すなわち、upper に対しては lowerlower に対しては upper を)、 set1 の対応する位置で指定しているときだけである。 その場合は、大文字小文字の変換を指定していることになるわけだ。 以下に文字クラスの名前を列挙する。なお、無効なクラス名を指定すると、エラーになる。

alnum

アルファベットの文字と数字。

alpha

アルファベットの文字。

blank

水平方向の空白 (Horizontal whitespace)。

cntrl

制御文字。

digit

数字。

graph

表示可能文字。空白を含まない (訳注: スペースもタブも改行も、すなわち、ホワイトスペースを一切含まない)。

lower

アルファベットの小文字。

print

表示可能文字。空白を含む (訳注: タブや改行は含まないが、スペース (0x20) は含む)。

punct

句読点 (訳注: 引用符なども含む)。

space

水平方向や垂直方向の空白 (Horizontal or vertical whitespace)。

upper

アルファベットの大文字。

xdigit

16 進数の数字。

等価クラス

[=c=]’ という書式は、c と等価な文字のすべてに展開される。 展開される文字の間に特定の順序はない。等価クラスは、比較的最近の発明であり、 英語以外のアルファベットをサポートするためのものである。 しかしながら、等価クラスを定義したり、何が等価クラスに含まれるかを決定したりする標準的な方法は存在しないようだ。 そのため、GNU の tr は、等価クラスを十分に実装していない。 各文字の等価クラスにはその文字しか含まれていないので、あまり使い道がない。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated on June 7, 2022 using texi2html 1.82.