On Sun, 31 Aug 2008 00:03:03 +0900
Bunta <hi9t-ooy@...-net.or.jp> さんwrote:
> 僭越ですけれど、ここだけ確認させていただきます。パターンスペースに行を
> 読み込んだら改行は取られます。 出力するときに付けられます。(複行は別)
> →「\n---\n」となる★、ここが気になりました。デバッガも「$」って書いてく
> れてますよね。
Perlなんかでは、$というのは、文字列の末尾あるいは行末に改行文字がある
場合にはその直前の両方にマッチしますからね。sedはどうかな。
特に複行の場合は、パターンスペースで行末に\nがないと次の行が後ろに入っ
たときに行の区切りが分からなくなりますね。Pコマンドは最初の改行までを出
力するわけですから。そしてDコマンドは最初の改行までを削除するわけですか
ら。
そのように、Doughertyのsed & awkには書いてありますね。それでループがう
まく回るので納得したのですが^^;)パターンスペースに読み込んで改行が取られ
ると複行処理ができないのでは。
> 元のはいちおう理由があって(ロジックが分かりやすかったでしょ)ああなっ
> ているのですが、以下のように書いたほうがすっきりするかもしれません。
>
> -------------------------
> $!N
> /^[^\n][^\n]*\n---$/{
> P
> s/^[^\n]*//
> }
> P
> D
> -------------------------
なるほどね。区切りの改行を2回出力するわけですね。
そうですね。空行が---行の直前にあったりなかったりするのを、あることに
調節するだけなら、
/^$/d
s/^---$/\n&/
が簡単そう。ただ、この場合、必要な空行を削除してしまうのが難点。それが嫌
なら複行処理を使うしかないですね。
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html