前: Extended Commands, 上: sed Programs


3.9 正規表現でのエスケープに関するGNUの拡張

この章まで,sedにキャレットを特殊文字でなく文字通りに解釈する ように伝える`\^'の形式のエスケープだけを見てきました.例えば, `\*' はゼロ以上のバックスラッシュでは無く単一のアスタリスクにマッ チします.

この章では,他の種類のエスケープを紹介します1 — すなわち,通常の文字や文字の連続に適用さ れるエスケープは文字通りに受けとられ,sedは特殊文字で置換しま す.これは,パターン空間の印刷不可能な文字を目に見える方法でエンコード する方法を提供します.sedスクリプト内での印刷不可能な文字の存 在に制限はありませんが,スクリプトがシェルやテキストの編集で準備される とき,バイナリ文字で表現するより,以下のエスケープシーケンスの一つを使 用する方が通常は簡単です.

以下は、これらのエスケープのリストです.

\a
bel文字を生成またはそれにマッチし,それは“アラート”(ascii 7)です.
\f
フォームフィードを生成またはそれにマッチします(ascii 12).
\n
改行を生成またはそれにマッチします(ascii 10).
\r
キャリッジリターンを生成またはそれにマッチします(ascii 13).
\t
水平タブを生成またはそれにマッチします(ascii 9).
\v
“垂直タブ”と呼ばれるものを生成またはそれにマッチします(ascii 11).
\cx
Control-xを生成,またはそれにマッチし,xは任意の 文字です.`\cx'の明確な効果は以下のようになります.xが 小文字の場合,それは大文字に変換されます.文字のビットの6(16進数の40)が 反転します.このため,`\cz'は16進数の1Aになりますが,`\c{'は 16進数の3Bになり,`\c;'は16進数の7Bになります.
\dxxx
十進数のascii値がxxxの文字を生成またはそれにマッチします.
\oxxx
八進数のascii値がxxxの文字を生成またはそれにマッチします.
\xxx
16進数のascii値がxxの文字を生成またはそれにマッチします.

`\b'(バックスラッシュ)は,既存の"単語の境界"の意味と衝突するので削 除されています.

それ以外のエスケープは特定の文字集合にマッチし,正規表現内だけで有効で す.

\w
あらゆる“単語”文字にマッチします.“単語”文字とはすべての文字と数字 とアンダースコアです.
\W
“単語以外”の文字にマッチします.
\b
単語の境界にマッチします.つまり,左が“単語”の文字になっている文字と, 右が“単語以外”の文字になっている文字,またはその逆にマッチします.
\B
単語の境界ならどこにでもマッチします.つまり,文字の左と文字の右の両方 が“単語”または“単語以外”のいずれかの場合にマッチします.
\`
パターンスペースの最初だけにマッチします.これは,複数行モードの ^とは異なります.
\'
パターンスペースの最後だけにマッチします.これは,複数行モードの $とは異なります.

脚注

[1] この章で紹介する すべてのエスケープは,\n以外GNUの拡張です.基本正規表 現モードでは,POSIXLY_CORRECTを設定することで,それらを利用する ことができなくなります.