.. -*- coding: utf-8; mode: rst; -*- .. index:: sed; sed 範囲境界そのものは含まない範囲指定 ====================================== 202年03月16日 2024年11月4日 加筆 sedの範囲指定は X <= hoge <= Y となっている。 これを X < hoge < Y にするにはひと工夫必要になる。 たとえば、 指定範囲の処理をしようと思うと、 以下のようにするだろう。 これは指定範囲内の '<' を '<' に、 '>' を '>' に置換する。 .. code-block:: sed :linenos: /
/,/<\/pre>/ {
s/\</
s/>/\>/
}
これは指定通りに動くが、おそらくあなたの意図とは異なる。
sedのアドレス範囲は、上記で言う の行も
の行も
含むので、 '<pre&lgt;' と '</pre>' も拝むハメになる。
そこで範囲の境界そのものは含まないよう、 以下のようにしてみた。
.. code-block:: sed
:linenos:
//,/<\/pre>/ {
// {
n
}
/<\/pre>/ {
n
q
}
s/\</
s/>/\>/
}
指定範囲の中で、 だったら、 その行を出力して次のサイクルに映る
(nコマンドは print;continue 動作する)。
指定範囲の中で、
だったら、 その行を出力して、その後
サイクルを中断する(指定範囲の処理から抜ける break )。
指定範囲の中で、 それ以外は s する。