次: Common Commands, 前: Addresses, 上: sed Programs
sedの使用方法を知るため,正規表現(短くするとregexp)を理 解すべきです.正規表現とは,右から左へならぶ対象文字列に対してマッチす るパターンです.ほとんどの文字は普通(ordinary)のもので,それらは パターン内ではその文字自身を意味し,対象内の対応する文字にマッチします. ちょっとした例として以下のパターンを考えます.
The quick brown fox
それは,それと全く同一な対象の文字列の一部にマッチします.正規表現の威 力は,パターン内に代入と繰り返しを含めるという能力にあります.それらは 特殊文字(special characters)を使用してパターン内にエンコードされ, その文字自身を意味せず,代わりに特殊な方法で解釈されます. sedで使用される正規表現の構文の短い記述は以下のようになります.
*\が前置されている特殊な文字,.,正規表現のグループ(以下を
参照),括弧でくくられた表現です.GNUの拡張として,正規表現の
語尾に*を続けることも可能です.例えば,a**はa*と等
価です.POSIX 1003.1-2001では,*が正規表現やサブ正規表
現の先頭にある場合には,その文字自身を意味するとされていますが,
GNU以外での実装では,ほとんどもものがこれをサポートしていない
ので,移植性の高いスクリプトでは,このときには代わりに\*を使用し
てください.
\+*に似ていますが,一つ以上にマッチします.それはGNUの拡
張です.
\?*に似ていますが,ゼロまたは一つだけにマッチします.これは
GNUの拡張です.
\{i\}*に似ていますが,正確にi個連続したものにマッチします
(iは10進数の整数です.移植性のために0から255の間にしてください).
\{i,j\}\{i,\}\(regexp\)\(abcd\)*のような,後置されるオペレータを適用します.これは,ゼ
ロ以上の`abcd'全体の連続を検索しますが,abcd*は`abc'に
ゼロ以上の`d'が続くものを検索します.\(abcd\)*は,
POSIX 1003.1-2001で要求されているためサポートされていますが,
GNU以外での実装では,ほとんどもものがこれをサポートしていない
ので,一般的に移植性の高くありません.
.^^#includeは,"#include"が行の最初
にあるところだけにマッチします — その前に一つか二つのスペースがある場
合,マッチは失敗します.^は,正規表現や部分正規表現の最初(すなわ
ち,\(や\|の後)にある場合のみ特殊文字として動作します.移
植性の高いスクリプトでは,部分正規表現の最初で^を使用するのは避
けるべきで,それはPOSIXでは,^を文章内の通常の文字とし
て扱う実装も許可しているためです.
$^と同じですが,行の終りを参照します.$も,正規表現や部分
正規表現の最後(すなわち,\)や\|の後)にある場合のみ特殊文
字として動作し,部分正規表現の最後での利用には移植性がありません.
[list][^list]前置される^は正規表現の意味を反転するので,listにな
い単一文字にマッチします.リストに`]'を含めるため,それを(必要な
^の後の)最初の文字にし,`-'をリストに含めるため,それを最初
または最後にしてください.`^'を含めるため,最初の文字より後に書い
てください.
文字$,*,.,[,そして\は,通常は
list内で特殊文字にはなりません.例えば[\*]は,この状況では
\が特殊文字ではないので,`\'にも`*'にもマッチします.
しかし,[.ch.],[=a=],そして[:space:]のような文字
列はlist内で特殊扱いされ,対応するシンボル,等価のクラス,そして
文字クラスにそれぞれ対応するので,後に.,=,または
:が続く[はlist内で特殊扱いされます.
POSIXLY_CORRECTモードでないときも,\nと\tのような特
殊なエスケープはlist内で認識されます.See Escapes.
\|regexp2\|,^,そして$より綿密になりますが,それ以外の正
規表現オペレータよりは弱くなります.
\digit\(...\)の括弧付き部分正規表現にマッ
チします.これは,後方参照(back reference)と呼ばれています.部分
正規表現は,左から右の出現順に数えた番号が暗黙に指定されます.
\n\char$,*,.,
[,\,または^の一つです.移植性があると仮定可能な
Cのようなバックスラッシュシーケンスは,改行に対する\nと
\\だということに注意してください.特に\tは移植性がなく,
ほとんどのsed実装でタブ文字ではなく`t'にマッチします.
正規表現のマッチは欲張りで,つまりマッチは左から右に試みられ,二つ以上 のマッチが同じ文字から開始される場合は,その最も長いものを選択すること に注意してください.
例です.