On Thu, 28 Aug 2008 16:26:00 +0900
Bunta <hi9t-ooy@...-net.or.jp> さんwrote:
> =====================
> aaa
> ---
> =====================
>
> といった入力が
>
> =====================
> aaa
>
> ---
> =====================
> となれば正解のはずです。
目的によるのですが、単に
s/^---$/\n&/
か、あるいは
s/^---$/\
&/
とすればよいような気もします。
でびさんも言われているようにsedのバージョンによって改行の取り扱いが違い
ますから、複数行を取り扱うとパターンスペースの中で動作が変わってしまうか
もですね。
sedは忘れちゃってるし^^;)、環境にあるのはcygwinのsedぐらいだし、7種類も
のsedについて調べるのは無理ですね^^;;;Buntaさんが一番詳しいのでは^^)
スクリプトについてはもっとシンプルに問題を考える必要があると思います。
sedも自分の思うとおりに動くものがあるなら、それを使えばよいのでは・・・
>
>
> ------- test.sed -------
> #egsed(GNU4.0.7), ssed, onigsed
> $!N
> /^aaa\n---$/{
> s/\n/\n\n/
> P
> # s/aaa\n// # こうなら誤って2つ消しはしない
> # s/[^\n]*\n// # これだと2つ消す
> s/[^\n]\+\n// # これでも2つ消す
> }
> P
> D
> ------------------------
>
> GNU4.0.7(English), SSED, MBSED(GNU sed 4.1.4の日本語Windowsへの移植版)では、
> 「正解」にたどり着きます。onigsedが駄目なんです。(ToT)
>
> Bunta
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html