.. -*- 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//\>/
   }

これは指定通りに動くが、おそらくあなたの意図とは異なる。
sedのアドレス範囲は、上記で言う 
 の行も 
の行も 含むので、 '<pre&lgt;' と '</pre>' も拝むハメになる。 そこで範囲の境界そのものは含まないよう、 以下のようにしてみた。 .. code-block:: sed :linenos: /
/,/<\/pre>/ {
	/
/ {
		n
	}
	/<\/pre>/ {
		n
		q
	}
	s//\>/
   }

指定範囲の中で、 
 だったら、 その行を出力して次のサイクルに映る
(nコマンドは print;continue 動作する)。
指定範囲の中で、 
だったら、 その行を出力して、その後 サイクルを中断する(指定範囲の処理から抜ける break )。 指定範囲の中で、 それ以外は s する。