On Sun, 17 Aug 2008 20:38:46 +0900
Bunta <hi9t-ooy@...-net.or.jp> さんwrote:
> >C:\Scripts>bin\onigsed -R -f test.sed object
> >v.c./vz 43番, 文太
> >のように、-nオプションを除くとコマンドラインに出力されました。
>
> これは、あの、あの、あの。藤岡さん、sedを完全に忘れてしまいましたね。
> sedは、awkやperlと違って、入力をデフォで出力するんです。意識的に-nを
> しないと。で、あのスクリプトはグレップなんです。
なるほど、もう忘れていますね(^^;)sedはFGALTS以来触っていないですからね。sed
の機能はjperlですべて実現できますし、jperlは速いですから。
> ですから(繰り返しですが)、-nを取って入力行が出てきても、マッチしたか
> どうかは分からないのです(もちろん、僕もマッチするはずじゃん、と思ってい
> るんですが。たぶん、Onigsedのほうに問題があると思う。もちろん、僕の頭に
> 問題がある可能性は、いつでもいっぱいあるのですが。)
>
> --- object ---
> v.c./vz 43番
> aaaa #-nを取ったら、この行もマッチもしないのに
> -------------- #出力されてきます。
>
> --- test.sed ---
> #Onigsed -n -R -f test.sed
> /v\.c\.\/vz [0-9]+/p
> ----------------
>
> 「aaaa」はどうでもよいのですが、申し訳ありませんが、これをもう一度だけ
> やってみていただけませんか。「-R」は外しても意味が変わりません(ただその
> スクリプトでは必要なんです)実際、これを外しても、やっぱりマッチしてくれ
> ないと思うのです。
> /v\.c\.\/vz [0-9]+/
> のどこで不具合が発生しているのか、どうもうまく判定できないのですが。
最初から一文字ずつ加えていって、どこでマッチしなくなるか調べると、半角
空白のところでマッチしなくなります。半角空白を\sに交換するとマッチするよ
うになります。この場合は-Rオプションが必要ですね。
半角空白以降の「[0-9]+番」もマッチしますから、半角空白のマッチの部分が
おかしいですね。他の例を作って試しましたけど、再現しました。
-----^ data.txt
v.c./vz 43番, 文太
aaaa
12345
a 1
-----$
-----^ a.sed
/[a-z] [0-9]/p
-----$
-----^ b.sed
/[a-z]\s[0-9]/p
-----$
a.sedはdata.txtのどの行にもマッチしませんが、b.sedは、
C:\Scripts>bin\onigsed -n -R -f b.sed < data.txt
v.c./vz 43番, 文太
a 1
とマッチします。
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html