grep: Basic vs Extended

 
 3.6 Basic vs Extended Regular Expressions
 =========================================
 
 In basic regular expressions the meta-characters ‘?’, ‘+’, ‘{’, ‘|’,
 ‘(’, and ‘)’ lose their special meaning; instead use the backslashed
 versions ‘\?’, ‘\+’, ‘\{’, ‘\|’, ‘\(’, and ‘\)’.
 
    Traditional ‘egrep’ did not support the ‘{’ meta-character, and some
 ‘egrep’ implementations support ‘\{’ instead, so portable scripts should
 avoid ‘{’ in ‘grep -E’ patterns and should use ‘[{]’ to match a literal
 ‘{’.
 
    GNU ‘grep -E’ attempts to support traditional usage by assuming that
 ‘{’ is not special if it would be the start of an invalid interval
 specification.  For example, the command ‘grep -E '{1'’ searches for the
 two-character string ‘{1’ instead of reporting a syntax error in the
 regular expression.  POSIX allows this behavior as an extension, but
 portable scripts should avoid it.