Какой стандарт регулярных выражений используется в grep?

1051
Denys S.

Используется ли стандарт регулярных выражений в grep POSIX + ASCII или что-то еще?

0

1 ответ на вопрос

3
Majenko

Все зависит от того, какие флаги вы передаете 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 | $' {} \; >> $

Да, я рад, но это не говорит о том, какой стандарт на самом деле используется, и если это микс, тогда нет никаких ссылок на смешанный стандарт. В общем, мы знаем, что это работает с чем-то, но не знаем, с чем именно. : D Denys S. 13 лет назад 0
@den: регулярные выражения POSIX описаны в [regex (7)] (http://linux.die.net/man/7/regex), Perl's - [perlre] (http://perldoc.perl.org/perlre .html). grawity 13 лет назад 0
Это касается Linux, но опция «-P» недоступна в MinGW («grep: Поддержка опции -P не скомпилирована в этот двоичный файл --disable-perl-regexp»), по крайней мере, по умолчанию. Peter Mortensen 12 лет назад 0
Разные `grep`s понимают (слегка) разные RE (и флаги, и ...) vonbrand 11 лет назад 0
@PeterMortensen, [GnuWin32] (http://gnuwin32.sourceforge.net/) поддерживает `grep -P`, я не уверен, поможет ли это. Грег Cygwins делает так же, афаик Sebastian Godelet 10 лет назад 0

Похожие вопросы