作者: 藤岡和夫
日時: 2008/8/31(15:13)
On Sun, 31 Aug 2008 14:17:50 +0900
Bunta <hi9t-ooy@...-net.or.jp> さんwrote:

>  GNU sedの拡張です。
> `.'
>      Matches any character, including newline.
> This is sed.info, produced by makeinfo version 4.5 from sed.texi.より。
> (その本はGNU sedも考慮しているようですが、元々は考慮してないと思います。
> 英語版の2nd ed.でも同じように記述されていました。誤解しやすいですね。)

 なるほど、了解しました。

> > しかし、改行とは行末にあるもので、そのほかの位置にある改行は単なる一文
> >字と見做すということになっているということでしょうね。
> 
>  行末でも1字です。
> 
> C:\>sed --version
> GNU sed version 1.18 + multi-byte extension 1.03
>  特別に記さないかぎり、上の結果です。
> 
> --- test.sed ---
> G		# put a newline at the end of PS
> s/\(.\)$/n/	# $ matiches $, not \n or an empty space before \n in SED
> ----------------
> --- test.txt ---
> a
> ----------------
> --- kek --------
> an
> ----------------

 これは、Gコマンドで付加した改行についての話なので当然ですね。

 これを改行を置換せずに出力すると改行が2回出力されますから。元の改行が
なくなっているかどうかの証明にはならないと思います。

ですが^^;)

G
/^.\n$/{
p
}

のようなスクリプトでtest.txtを処理すると、test.txtを「a」としても「a\n」
としていても2回改行が出力され同じ結果になりますから、パターンスペースに
入るときに改行が削除され、出力する時に付加されることは間違いないですね。

 おそらく改行を付加したりしなかったりの操作があるので、下手に改行が文字
列の末尾にあると不便なんでしょう。

 ようやく納得しました。GNU sedはPerlとはかなり違いますね。

藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html