5.5 文字クラスと括弧式
括弧式は、「[」と「]」で囲んだ文字のリストです。リスト内の任意の1文字に一致します。リストの最初の文字がキャレット「^」なら、リストに含まれない任意の文字に一致します。たとえば、次のコマンドは文字列「gray」または「grey」を「blue」に置き換えます。
sed 's/gr[ae]y/blue/'
括弧式は基本正規表現でも拡張正規表現でも使えます(つまり、-E/-rオプションの有無にかかわらず使えます)。
括弧式の中で、範囲式はハイフンで区切った2文字からなります。並べ替え順でその2文字の間にある任意の1文字に、両端を含めて一致します。既定のCロケールでは、並べ替え順は本来の文字順です。たとえば、「[a-d]」は「[abcd]」と同じです。
また、括弧式の中では、次に示す名前付き文字クラスがあらかじめ定義されています。
これらの名前付きクラスは、それ自体を括弧の内側で使わなければなりません。正しい使用例:
$ echo 1 | sed 's/[[:digit:]]/X/' X
誤った使用法は新しいsedでは拒否されます。古い版では受け付けていましたが、単一の括弧式として扱いました(これは「[dgit:]」、つまり文字d/g/i/t/:だけに一致する式と同じです)。
# current GNU sed versions - incorrect usage rejected $ echo 1 | sed 's/[:digit:]/X/' sed: character class syntax is [[:space:]], not [:space:] # older GNU sed versions $ echo 1 | sed 's/[:digit:]/X/' 1
- ‘[:alnum:]’
字母と数字:「[:alpha:]」と「[:digit:]」。「C」ロケールとASCII文字エンコーディングでは、「[0-9A-Za-z]」と同じです。
- ‘[:alpha:]’
字母:「[:lower:]」と「[:upper:]」。「C」ロケールとASCII文字エンコーディングでは、「[A-Za-z]」と同じです。
- ‘[:blank:]’
空白文字:スペースとタブ。
- ‘[:cntrl:]’
制御文字。ASCIIでは、8進数の文字コード000〜037、および177(DEL)に当たります。ほかの文字集合では、対応する文字があればそれに当たります。
- ‘[:digit:]’
数字:
0 1 2 3 4 5 6 7 8 9。- ‘[:graph:]’
可視文字:「[:alnum:]」と「[:punct:]」。
- ‘[:lower:]’
小文字。「C」ロケールとASCII文字エンコーディングでは、
a b c d e f g h i j k l m n o p q r s t u v w x y zです。- ‘[:print:]’
表示可能な文字:「[:alnum:]」「[:punct:]」、およびスペース。
- ‘[:punct:]’
句読点文字。「C」ロケールとASCII文字エンコーディングでは、
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~です。- ‘[:space:]’
空白類文字。「C」ロケールでは、タブ、改行、垂直タブ、フォームフィード、キャリッジリターン、およびスペースです。
- ‘[:upper:]’
大文字。「C」ロケールとASCII文字エンコーディングでは、
A B C D E F G H I J K L M N O P Q R S T U V W X Y Zです。- ‘[:xdigit:]’
16進数字:
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f。
これらのクラス名に含まれる括弧は記号名の一部です。括弧式を区切る括弧とは別に、必ず含めてください。
ほとんどのメタ文字は、括弧式の中では特別な意味を失います。
- ‘]’
リストの最初の要素でなければ、括弧式を終わらせます。そのため、「]」をリストの要素にするには、最初に置かなければなりません。
- ‘-’
リストの先頭や末尾、または範囲の終点でなければ、範囲を表します。
- ‘^’
リストに含まれない文字を表します。「^」をリストの要素にするには、先頭以外の位置に置いてください。
TODO:この段落を組み込む(BREの節からそのままコピーしたもの)。
$、*、.、[、\は、通常listの中では特殊文字になりません。たとえば、ここでは\が特殊文字ではないため、[\*]は「\」または「*」に一致します。ただし、[.ch.]、[=a=]、[:space:]のような文字列はlistの中でも特別な意味を持ち、それぞれ照合記号、等価クラス、文字クラスを表します。そのため、listの中で[の後に.、=、:のいずれかが続く場合は特殊文字になります。また、POSIXLY_CORRECTモード以外では、\nや\tなどの特殊なエスケープがlistの中で認識されます。エスケープシーケンス:特殊文字の指定を参照してください。
- ‘[.’
照合記号の開始を表します。
- ‘.]’
照合記号の終了を表します。
- ‘[=’
等価クラスの開始を表します。
- ‘=]’
等価クラスの終了を表します。
- ‘[:’
文字クラス記号の開始を表し、その後には有効な文字クラス名が必要です。
- ‘:]’
文字クラス記号の終了を表します。