Bruce.です。
Bruce. writes:
> cgrepに関しては、そのEmacs起源の正規表現ルーチンをほぼ
> そのまま(ShiftJIS対応はしている)使っているものであり、
> \s \S を解釈する部分はEmacsに組み込んで使われるときでないと
> 有効にならないはず(さらに有効にしてもPerlと意味が違う)
> なので、cgrep で \s が空白を認識するというのはちょっと
> 信じられません。
>
> ただ実際に試してみると、\s がスペースにマッチしてるっぽい
> んですよねえ。それでいて \S が空白以外にマッチしないと
> いうのもよくわかりませんが。
この件判明しました。
cgrepは正規表現ルーチンに検索パターンを渡す前に、別個にエスケープ
シーケンスの処理をしていて、そこで
\t → タブ (0x09)
\s → スペース (0x20)
への置き換えを行っています。
ですから、\s は単一のスペースにはマッチしますが、その他の空白類
(タブとか改行とか)にはマッチしません。あくまでも「エスケープシーケンス」
であって、「メタ文字」ではないということですね。
実はドキュメント(cgrep.doc)の先頭に
> 検索パターンは GNU の egrep に倣った正規表現が使えます。
> 複数の検索パターンを指定して OR、AND 検索ができます。
> エスケープシーケンスとして \s、\t、\0ooo、\xhh が使えます。
というのがありましたとさ。
いじょ。