作者: Bunta
日時: 2005/1/12(13:58)
 Bruce.  さん、どうもありがとうございます。やっぱり、すでに「研究」を開
始されてる!
 いちおう、意味なしどころか有害な可能性もありますが、前の発言をだいたい
書き終えていましたので、そちらも。


>工数見積もりのため改めてGNU grep 2.5.1のソースを見てみたのですが。
>sedよりはちと面倒かな、と。
>
>ということで、
>
>・何ゆえにgrepにPerl互換正規表現が欲しいのか

 話せばながくなりますし、書けば書くほど、その程度のレベルでそんな高価な
ものを欲しがってるわけ? となりそうですが、僕がさせて頂く回答は、単純そ
のものです。

 1 僕は、まだ perl が使えなくて、perl に grep の動きがさせられない。

 2 perl の正規表現は、間違いなく強力で、少なくとも ERE では、ふつう達
成不可能な表現力を持っている。それがプログラミングは敷居が高いけれど、オ
プション指定と正規表現の文法程度なら修得可能という人に、 perl 正規表現の
恩恵をもたらすことができる。そんな表現力をもっと正規表現が、広く使われう
るツールに装備されうるなら、それはノン・プログラマーに今までにない情報抽
出能力を授けることになる。

 3 これは極論かもしれませんが、grep, grep -E, grep -P という BRE, ERE,
Perl-like の区別さえ不要だと僕には思えます。デフォルトで -P と同じ動きの
ほうがスマートだとさえ思えます。grep -Fは要りますが。

 4 十分な根拠かどうかわかりませんし、伝えたいことをどれだけ表現できて
いるか心もとないのですが、 正規表現自体の表現力と、 それがどのように実行
(実装?)されうるか、はツール次第ですよね。[Aa][Bb][Cc] は、/ABC/i と正
規表現自体で表現しうる。 でも、これは、BREgrepですら、grep -i "abc" で十分だ
った(行抽出でいいなら。grep  -o -i "abc" で /abc/i と同じ結果)。ツール
にはツールの特色があり、 そんな grep が perl-like regex を持つのは、やは
り perl 入門という意味においてさえ、有意味だと思うのです。

> ・ GNU grep 2.5 で使いたい機能 (-o オプションあたりですか )

 はい。 そうです。800bytes の行が10個ヒットしても、マークでもできなけ
れば(cgrep ができる)、ヒット箇所を特定するのが困難なんです。

> ・ディレクトリの再帰検索は必須か ?

 Bruce.  さんから、cgrep で、これを自前で実装した、と聞いたとき、あ、そ
れはいいな、と思いました。 ただ、必須か、と問われると、うーん、あったら
やっぱり楽ですよね、という程度でしょうか。
 もちろんできるに越したことはないですが、それでも別の方法で(ちょっと面
倒でも)実現可能なら、それほど執着していません。バッチにするなり、パイプ
するなりの方法はあるはずなので、必須とまではは思っておりません。これには
対処法がなくはない。でも、Perl-like な正規表現は(最初の一番大事な点へも
どる)、同じ結果を得ようと思ったら、やたらに面倒な処理が必要になるように
思っています。稚拙な例だと思いますが、前後読み一つとっても、否定が1文字
喰ってしまうという弱点を解消してくれます。これは、本当に助かる点だと思い
ます。


 こうお伝えして意味があるかわかりませんが(矛盾さえしている)、たとえば、
鬼車の \h と [:xdigit:] のように、入力や表現を楽に、というのは確かにあり
ます(-i vs /regex/i)。それでも、そういう指示の与えかたがあるなら=そう
いう表現力があるなら、僕が \h にまったくこだわらなかったように、あまり、
あれもこれもとは思っていません。c.mos 氏の「それは、マクロで実現可能です」
と同じように、[:xdigit:] で済ませればいいことだと思っています。


 といいつつ、

       -d ACTION, --directories=ACTION
              If  an  input  file is a directory, use ACTION to
              process it.  By default, ACTION  is  read,  which
              means  that  directories are read just as if they
              were ordinary files.  If ACTION is skip, directo-
              ries are silently skipped.  If ACTION is recurse,
              grep reads all files under each directory, recur-
              sively; this is equivalent to the -r option.

 これで肩代わりにはなりませんか? > directory recursive


>あたりを明確に述べてください > 文太さん

 明確かどうか分からないですが(何を言わせても明確でない奴>おのれ)、如
何でしょうか?

 僕などには詳細にはわかりませんが、有用度(人によりけりですが)が低いの
に、コーディングがやたら大変、という場合には、「これ要らないよね」と端折
っていただいてもいいと思います。  「人によりけり」の要素が大きいですが、
「これ要る? どれくらい要る?」と訊いてくだされば、それなりに返事だけは
させていただきたいと思います。

 ・Winで動く
 ・日本語が通る
 ・regexがperl-likeである
 ・-oが効く
 ・grep -Fが効く
 ・(GNU系の便利な拡張が生きてる=何だ? \s, \t, -r, -Rとか?)

 とりあえずの要望事項は、こんなところでしょうか。あとは普通のgrepにでき
ることができてくれれば、十分な汎用性を確保したことになるような気がします
が…。


 追伸:FGALからの回答があり、2月22日が発言アップ、最終締め切りだ
そうです。