From: Junio C Hamano Date: Sat, 01 Mar 2008 20:52:43 GMT Subject: Re: [PATCH v2 1/3] git-submodule: New subcommand 'summary' (1) - code framework Message-ID: <7vejauxj38.fsf@gitster.siamese.dyndns.org> In-Reply-To: <46dff0320803010227r5024d152g259a6a07a2441351@mail.gmail.com> "Ping Yin" 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".