Все зависит от того, какие флаги вы передаете grep.
Обычный grep без флага (который совпадает с передачей -G) использует «Базовые регулярные выражения»:
-G, --basic-regexp Interpret PATTERN as a basic regular expression (BRE, see below). This is the default.
Если вы укажете -E, он будет использовать «Расширенные» регулярные выражения:
-E, --extended-regexp Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.)
И тогда у вас есть -P для регулярных выражений Perl (PCRE):
-P, --perl-regexp Interpret PATTERN as a Perl regular expression. This is highly experimental and grep -P may warn of unimplemented features.
Основные против расширенных регулярных выражений
В основных регулярных выражениях метасимволы?, +, {, |, (И) теряют свое особое значение; вместо этого используйте версии с обратной косой чертой \ ?, +, {, \ |, (и).
Традиционный egrep не поддерживает -name "check_*" -type f -exec sh -c '$0 | $' {} \; >> $