作者: Bunta
日時: 2005/1/06(23:50)
 Bruce.さん、レスが遅くなりました。m(__)m

>> >   \h       hexadecimal digit char   [0-9a-fA-F]
>> GNU sed自体が十六進表記の指定をサポートしていますので、そちらが有効に
>> なっています(\xhh)。
>
>すいません、勘違いしていました。鬼車の \h はPOSIXブラケットの[:xdigit:]
>と等価な表記ですね。

 そうそう、そうなんじゃないかと思って、以下の格闘をして年末年始のバタバ
タで流れてしまっていたのです。わざわざ書かせてしまってすいませんでした。

>これは使用している鬼車のバージョン(2.4.0)では
>サポートされていませんので当然サポートされません。

 これは、POSIXブラケットが、鬼車でサポートされていない、という意味です
よね。

>どうしても使いたいというなら説得してください ;-)

 いえ、説得できるスキルがありません(以下の如く)。でも、もっとハイレベ
ルな人なら、入れてくれ、というのかなぁ? 以下の実験をしていても、\d, \D
は絶対要る、でも \h, \H はなぁ、と思っていました。POSIX ブラケット全体に
関しては、…。あったら安心ではありますが、是非、というレベルには、まだあ
りません。

 ただ、それより、じつは先日、手元の (e)?grep が、あああ、なことに気づき
ました。『詳説』の最初が egrep からなんですよ。そこで、「\s, \t が文字ク
ラス内([\s\t] とか)では使えない egrep もある」とかあったので、ちょっと
試してみたのです。(あ、e?grepが無駄がない書き方だ。)

C:\>egrep -V
GNU grep version 2.0 + multi-byte extension 1.04
usage: egrep [-[[AB] ]<num>] [-[CEFGVchilnqsvwx]] [-W ctype=...]
            [-[ef]] <expr> [<files...>]

 うう、文字クラスどころか、そもそも\s, \tを許してなかった。

 そして、GNU grep は 2.5  になっていて、\s, \t を許してくれて、文字グレ
ップが可能になっていることを発見してしまった(文字グレップは izgrep が最
初に装備=これ、速いんです! new grep は色もつくらしい。cgrep みたいだ)。
そして、perl-like もできるらしい。 でも、英語用の Windows 用バイナリさえ
見つからない(英語屋なものですから、それでも助かる場面もあるな、と思った
のです)。でも、あーあ、な現実。
 少々前に  doggy なマルチバイト grep という話があったので、あまり気乗り
する話ではないでしょうし、 「必要なら onigsed でやれば」という方法が今や
あるわけですが(さすがに色はつきませんが=別に色は要りません)、それでも、
こっちをむしろお願いできないものだろうか、などと考えておりました。やるだ
けの価値がないでしょうかね。1年の抱負ならぬ、1年1度のお祈りでした(年、
越してますしぃ。去年はいい年だったなぁ、とか。多謝です)。

 余談ですが、VWX が [\s\t] を許していたので(10年前のソフトです)、け
っこうショックではありました。えー、grep も進化しようよ、と。

 元に戻ると、16進数の \h, \H より、そこまでするなら、鬼車+ PCRE で、
POSIX ブラケットのほうが汎用性があるように思いますが、でも、この足し算は
半端でないコーディングだろうと思いますので、  僕個人としては、  とにかく
onigsed が、僕が必要なところできちんと動くのを確認するのが先決です。まだ、
欲しかったもののテストができていない体たらくです。すいません。でも、あり
がとうございます。(日本全国を代表してる)おねだり派なんだから、それくら
いとっととやりなさい、という申し訳ない気持ちでいます。(ご存じだと思いま
すが、FGALTS も FGALDC も今年3月で消滅の模様です。 それもあって、ここの
ところ少しバタバタしておりました m(__)m)

 何はともあれ、2005年がBruce.さんにとって実り多い年になりますように!


 以下、どうでもいい、テストのためのお勉強。

sed.infoより
> `\dXXX'
>      Produces or matches a character whose decimal ASCII value is XXX.
> 
> `\oXXX'
>      Produces or matches a character whose octal ASCII value is XXX.
> 
> `\xXX'
>      Produces or matches a character whose hexadecimal ASCII value is
>      XX.


>onigsed -n "/\x31/p"           ;'1'の文字コードは、31h。これがASCII value
1                               ;と呼ばれるものなんだな。
1
^Z
>onigsed -n "/\d49/p"           ;31hは、10進数だと、49
1
1
^Z
>onigsed -n "/\x82\xA0/p"       ;'あ'は、82A0h
あ                              ;ふむふむ、それで、`\xXX'って具合で
あ                              ;XXって2桁なんだ。
^Z

鬼車のマニュアルより。
>   \d       decimal digit char
>            Unicode: General_Category -- Decimal_Number
>   \D       non decimal digit char
>   \h       hexadecimal digit char   [0-9a-fA-F]
>   \H       non hexadecimal digit char