作者: Bunta
日時: 2008/9/01(22:56)
 まとめです。

 Buntaくんがやれるのはこの程度です。m(__)m  >Bruce.さん

 egsed (GNU sed version 4.0.7, English), ssed, mbsed, onigsed
の4つで、onigsedを検証しました。改行文字「関連」の扱いに関してです。
BRE modeでこの程度の表現なら違いが出ないという理由で、この4つが選ば
れています。baseもほぼ同じ。

 検証されているのはonigsedで、他は実験に間違いがないことを確認する
ための参考意見です。mbsed(onigsedの兄)は完璧でした。立派! でも、
Perl-like Regexがないなので、頑張れonigsedとなっているわけです。
 恐そうな3人に囲まれているかのような構図ですが、いじめているのでは
ありません。「強くなれ、飛雄馬」「強くなれ、onigsed」です。(もちろん
『巨人の星』とonigsedは切っても切れない縁です。TS-network trivia.)

 また上で「関連」といってるのは、quantifierとかも絡むようだからです。
(間違っているかもしれない後知恵)


 #2436] Re:「\n」の振る舞い@日本語版sed(s)  で、
>  Onigsedでは、s/\n\n/\n/の命令に対して、s/\n\n/\n\n/のように
> 振る舞ってしまうのです。

 と書いていますが、もうちょっと話は複雑なようで、でもあともう少しだけ正確
なところを割り出せるような気がしていたのですが、な、なんと、途中で忘れてし
まってました。\(^_^)/ (なんで万歳してるんだよ)


 実験は(けっこう単純化できました。どうしてこれをすぐに思いつかないの?)、

--- test.txt ---
aa
bb
----------------
--- test.sed ---	# pattern space
			#aa (auto-reading)
G			#aa\n
G			#aa\n\n
$!N			#aa\n\n\nbb	this string is to be replaced etc....
????????????????	#ここに下の置換などのコマンドを入れる
----------------
 (これは改行文字を3つはさむ場合。2つならGを1つ取る。)

 という具合に行ないました。


(改行文字2つ)
# ( task: aa\n\nbb --> \nbb ) s/LHS//
# (when LHS is,)	(result of onigsed)
# 
#  ^[^\n][^\n]*\n	NG
#  ^[^\n]\+\n		NG
#  ^[^\n]\{1,\}\n	very NG (result: aa\n\n\nbb !!)
#  ^[^\n]\{2\}\n	very NG (result: aa\n\nbb !)
 ぜんぜん分かりませんねぇ。

(改行文字2つ)
# (task: aa\n\nbb -> \n\nbb)	s/[^\n]*// or s/^[^\n]*// 
# onigsed, result, very NG, deletes all.
 げ、これが駄目なの?

(改行文字2つ)
# Then, anything wrong with [^\n] proper?
# Answer. no.
# because (task: aa\n\nbb -> Aa\n\nbb)	s/[^\n]/A/
# onigsed: OK

(改行文字3つ)
# Anything wrong with \n proper? when \n in LHS is more than two.
s/aa\n\n\nbb/aa\n\nbb/		no, because this is OK with Onig

# But! the below fails.
s/aa\n\{3\}bb/aa\n\nbb/		NG

 少なくとも「量指定子」(かな)が絡むと、「\n」も「[^\n]」もこける
という感じでしょうか…。


 読みにくかったらごめんなさい。こういう事柄に正確であろうとすると英語に
なってしまって。そうしないと集中力がもたない(「もっててこのざま? 論理
的じゃないよ」「あうあう。でも何も分からないところに道を見つけて、Bruce.
さんに楽してもらおうと必死にやったんで、どうか許してやってくださいよ」)

 「ぜんぜん楽になってない (-_-#」 すみません。

 間違っていたらごめんなさい。I apologize in advance. :-)  
--I've never heard that expression above before, but it's cute.  :-)

 僕はまったく急いでいません。いつの日にか宜しくお願いいたします。m(_B_)m

追伸:もちろん、Vzerですので、SJISしか知りません。

Bunta