GNU sed 4.4 で確認した。
/regexp/d のデリミタ
sed '/regexp/d'
で regexp
にマッチする行を削除できる。
regexp
を括るデリミタに /
以外を使いたい場合、最初のデリミタの前に \
をつけるとできる。
$ cat input.txt | sed -e '\%regexp%d'
s/regexp/replacement/ のデリミタ
置換コマンド s/regexp/replacemenet/
でデリミタに /
以外を使いたい場合は、\
不要でそのまま使える。
$ cat input.txt | sed -e 's%regexp%replacement%'
違いは regexp がアドレスか、コマンドの一部か
sed スクリプトのシンタックスは次のようになる。
[addr]X[options]
X
はコマンド。(e.g. d
, s/regexp/replacement
)
addr
はアドレス。
addr
が指定された場合、addr
にマッチする行に対してのみ X
が実行される。
addr
にはいくつかの形式があり、正規表現で指定する形式として /regexp/
と \%regexp%
が利用可能。(それぞれに修飾子をつけた形式もある。)
後者の \%regexp%
はデリミタ %
を任意の文字に置き換えて利用できる。
要するに、
/regexp/d
の /regexp/
は アドレスであり、デリミタを変更したければ \%regexp%
を使う必要がある。
s/regexp/replacement/
はそれ全体 s/regexp/replacement/
が置換コマンドであり、 アドレスとは異なり \
なしでデリミタを変更できる。
コマンド s/regexp/replacement/
もアドレスと組み合わせて利用可能で、 正規表現アドレスと組み合わせると次のようになる。
$ cat input.txt | sed -e '/regexp1/s/regexp2/replacement/'
/regexp1/
部分はアドレスで、/regexp2/
はコマンドの一部なので、それぞれデリミタを変えようとすると次のようになる。
$ cat input.txt | sed -e '\%regexp1%s@regexp2@replacement@'