\(\)については以前メモしたけども、\+と\?と\|については互換性のためらしい。
sedやgrepは.とか*とか[]とかしかサポートしていなかったのだが、Ahoはegrepを開発した時に+や?や|をサポートした。で、grep側もこれを取り込もうとしたんだけども、これまでのコードは当然+や?や|を通常の文字として利用してきたわけで、互換性を保つためには\+や\?や\|をメタキャラクタとして利用しなければならなくなったということ。ソースは「Mastering Regular Expressions」
で、そもそも\+や\|や\?をサポートするのはGNU sedなどで、mac os xに付属しているsedだと対応していない。
$ echo fff | sed -e 's/f\+/hoge/' fff
この辺りposix的には大丈夫なのかなとちょっと調べると、
9.3.2 BRE Ordinary Characters
...
The interpretation of an ordinary character preceded by a( '\\' ) is undefined, except for: The characters ')' , '(' , '{' , and '}'
The digits 1 to 9 inclusive (see BREs Matching Multiple Characters )
A character inside a bracket expression
Regular Expressions
なるほど。バックスラッシュと文字との連続はBRE上どのように解釈しても良いということか