次: Regular Expressions, 前: Execution Cycle, 上: sed Programs
sedスクリプトのアドレスは,以下の形式のいずれかになります.
~
step$
/
regexp/
/
文字が含まれる場合,それぞれバックスラッシュ(\
)でエス
ケープする必要があります.
空の正規表現`//'は,前回の正規表現に繰り返しマッチします(それは,
空の正規表現がs
コマンドに渡されても同じです).正規表現を編集する
と,正規表現がコンパイルされるときに評価されるので,空の正規表現ととも
にそれらを指定することは不正な処理になることに注意してください.
\%
regexp%
%
は他の任意の単一の文字で置換してもかまいません.)
これは正規表現regexpにもマッチしますが,これで/
以外の分離
文字を使用することが可能になります.regexp自身が大量の/
を
含んでいる場合,個々の/
をエスケープするのも退屈なので,それを避
けるとき特に役に立ちます.regexp自身が分離文字を含んでいる場合,
それぞれをバックスラッシュ(\
)でエスケープする必要があります.
/
regexp/I
\%
regexp%I
I
指示語はGNUの拡張で,それによ
りregexpは大文字小文字を無視してマッチします.
/
regexp/M
\%
regexp%M
M
指示語は,GNU sedの拡張で,
^
と$
を(通常の動作に加え)それぞれ改行後の空の文字列と改行
前の空の文字列にマッチさせます.これらは特殊文字のならびです.
(\`
と\'
)
それは,バッファの最初と最後にマッチします.M
は
multi-lineを意味します.
アドレスが与えられていない場合,全ての行がマッチします.一つのアドレス が与えられている場合,マッチする行はアドレスがマッチしたものだけになり ます.
アドレスの範囲はカンマ(,
)で分けられている二つのアドレスで指定す
ることで指定することが可能です.アドレスの範囲は最初のアドレスにマッチ
している行から始まり,二番目のアドレス(これは含まれます)にマッチするま
で続きます.
二番目のアドレスがregexpの場合,マッチの終りの調査は,最初のアド レスにマッチした行の次の行から開始されます.範囲は常に少なくとも 二行になります(入力ストリームが終わる場合はもちろん例外です).
二番目のアドレスがnumberで,最初にマッチした行のアドレスより小さ い(または同じ)場合,一行のみマッチします.
GNU sedも特殊な二つのアドレス形式をサポートしています.これらはす べてGNUの拡張です.
0,/
regexp/
0,/
regexp/
のように,アドレス指定で行番号の0
を使用す
ることが可能です.言い替えると,0,/
regexp/
は
1,/
regexp/
に似ていますが,addr2が入力の最初の行にマッ
チする場合,0,/
regexp/
の形式では範囲の終わりだと考慮されま
すが,一方1,/
regexp/
の形式ではその範囲の最初にマッチするの
で,正規表現が二番目にマッチするのが見つかるまで範囲が広げられま
す.
これは,0
のアドレスに意味がある場所だけだということに注意してく
ださい.0番目の行はなく,それ以外の方法では,0
のアドレスに該当す
るコマンドはエラーとなります.
,+
N,~
N
アドレス指定の終りに!
文字を後置すると,マッチの意味が否定されま
す.すなわち,!
がアドレスの範囲に続いている場合,選択されたアド
レスの範囲にマッチしない行だけが選択されます.これは一つのアドレ
スに対しても動作し,おそらくひねくれているだけでしょうが,何もないアド
レスに対しても動作します.