2010年6月13日

Macのsedはやっぱり変! でも『ネコのマロン...』は面白そう

MacOSXのsedは、まだマルチバイト文字がうまく扱えないようです。

このsedでも、

 script_0  y/1234567890/1234567890/g

は、環境変数LANGがja_JP.UTF-8にセットされていればちゃんと動きますし、modernな正規表現も「E」オプションをつければ使えるのですが、下のtest.txtを
 script_1  s/[^]+/NEKO/g
で編集してみると... 元のままのテキストが出力されるだけ。patternがマッチしていないようです。

test.txt
[A]
コのマロン参院選に立つ。』の著者さん編集担当さんには
鳩山首相の辞任はとんだとばっちりではないですか?

今回の参議院選挙に間に合わせて公職選挙法を改正してット選挙を
解禁することはすべての党派で一致していたのに、辞任のドタバタで
会期を延長しないと改正が間に合わない...

ところでット選挙が解禁されても私がつくっているような印刷物での
選挙は従来どおりほとんどできないままになるようです。

[B]
コのマロン,参院選に立つ。』の著者さん編集担当さんには

[C]
コのマロン参院選に立つ。』の著者さん,編集担当さんには


そこで、マルチバイト文字である「」をシングルバイト文字の「,」に替えてみると...
 script_2  s/[^,]+/NEKO/g

編集結果は:
[A]
『NEKO
鳩山首相の辞任はとんだとばっちりではないですか?

今回の参議院選挙に間に合わせて公職選挙法を改正してNEKO
解禁することはすべての党派で一致していたのに辞任のドタバタで
会期を延長しないと改正が間に合わない...

ところでNEKO
選挙は従来どおりほとんどできないままになるようです。

[B]
『NEKO,参院選に立つ。』の著者さん編集担当さんには
[C]
『NEKO,編集担当さんには

変な文章になりますが、これは意図どおり。script_2は正しく作動しました。


私が編集しているのは日本語テキストなので、MacOSXのsedがこの有様では仕事になりません。(あ、書き忘れましたが、この記事でのスクリプトや処理対象テキストのエンコードはUTF-8です)。

そこで、GNUのsedをインストールしてみました。GNU sedでは「+」はエスケープしないといけないので、スクリプトは、
 script_3  s/[^]\+/NEKO/g

編集結果は:
[A]
『NEKO参院選に立つ。』の著者さん編集担当さんには
鳩山首相の辞任はとんだとばっちりではないですか?

今回の参議院選挙に間に合わせて公職選挙法を改正してNEKO
解禁することはすべての党派で一致していたのに辞任のドタバタで
会期を延長しないと改正が間に合わない...

ところでNEKO私がつくっているような印刷物での
選挙は、従来どおりほとんどできないままになるようです。

[B]
『NEKO編集担当さんには
[C]
『NEKO参院選に立つ。』の著者さん,編集担当さんには
はい、これも意図どおり (^_^)y これなら仕事に使えます。


なお、『ネコのマロン、参院選に立つ。』(植松眞人著, 保育社から7月上旬発売予定)は、ネット選挙が主なテーマじゃなくて今まで政治や選挙に興味がなかったり敬遠していた人々、または政治に興味を持ち始めた学生たちに、選挙のしくみをネコのマロンを通して楽しみながら知ってもらいたい...と企画されたのだそうです。

選挙や投票とは何か、参院選の任期のこと、など基本的なことから説明します、とのこと。つまり、私が上のtest.txtで書いたようなことは心配ないということです。


この本について詳しくは「ほいくしゃの本屋さん」サイトのページをご覧ください。
http://hoikusha-shop.jp/SHOP/9784-586-08510-1.html



なお、なお、GNU sedはオリジナルのソースからコンパイルしました。4.2.1版なのですが、MacOSX 10.6のXcodeであっさりインストールできましたよ。
MacPortとかFinkとかを使おうかと思ったのですが、それ自体がちょっと大層な(かつて、OSX 10.4で使った折の印象)システムなのでやめました。それに、MacPortだとsedをインストールするにはgettextとlibiconvが必要、gettextはexpat・libiconv・ncursesの3つが必要で、さらにncursesはncurseswが必要、戻ってlibiconvにはgperfが必要.......こんな風に芋蔓式にインストールするものが増えていくのも難儀なことでした(これはFinkでも、*BSDやLinuxのパッケージ管理システムでも同じですね)。今回、sedのソースだけでコンパイルできたってことは.... あの芋蔓はいったい (@_@;;

0 件のコメント: