On Sun, Mar 2, 2008 at 4:52 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 31 quoted lines
> "Ping Yin" <pkufranky@gmail.com> writes:
>
>
>
> >> > + grep '^:160000\|:[0-9]\+ 160000' |
> >>
> >> This looks troublesome.
> >>
> >> - [0-9] is obviously wrong and [0-7] is what you meant;
> >> - \| and \+ are not BRE but GNU.
> >>
> > man grep says
> > In basic regular expressions the metacharacters ?, +, {, |, (, and )
> > lose their special meaning; instead use the backslashed versions \?,
> > \+, \{, \|, \(, and \).
> >
> > Doen't it mean that '\|' is BRE ?
>
> It just says unlike in ERE, these characters are not special in BRE; it
> does not at all say using backslash like \?, \+, and \| makes them so.
>
> And they are not. \(...\), \{m\}, \{m,\} and \{m,n\} are part of BRE, but
> the two you used (\+ and \|) are not. GNU accept these two as extensions,
> but other POSIX implementations may have troubles with them.
>
> http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap09.html
>
> Please be gentle to porters to non GNU systems. Either stay inside BRE
> (which I think we have managed to do with our usage of grep) or explicitly
> ask for ERE with "grep -E".
>