grep에는 어떤 정규식 표준이 사용됩니까?

grep에는 어떤 정규식 표준이 사용됩니까?

grep에 사용되는 정규식 표준입니까?POSIX + ASCII아니면 다른 것이 섞여 있나요?

답변1

그것은 모두 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.)

그리고 Perl 정규식(PCRE)에 -P가 있습니다.

-P, --perl-regexp
    Interpret PATTERN as a Perl regular expression.  This is highly 
    experimental and grep -P may warn  of  unimplemented features.

기본 정규식과 확장 정규식

기본 정규 표현식에서 메타 문자 ?, +, {, |, ()는 특별한 의미를 잃습니다. 대신 백슬래시 버전인 \?, \+, \{, \|, \(및 를 사용하세요 \).

전통적인 egrep은 메타 문자를 지원하지 않았고 {일부 egrep 구현은 \{대신 지원하므로 이식 가능한 스크립트는 grep -E 패턴을 피하고 리터럴과 일치하는 데 {사용해야 합니다 .[{]{

{GNU grep -E는 유효하지 않은 간격 사양의 시작일 경우 특별하지 않다고 가정하여 전통적인 사용법을 지원하려고 합니다 . 예를 들어, 명령은 정규식의 구문 오류를 보고하는 대신 grep -E '{1' 두 문자 문자열을 검색합니다 . {1POSIX.2에서는 이 동작을 확장으로 허용하지만 이식 가능한 스크립트에서는 이를 피해야 합니다.

따라서 grep은 가능한 한 POSIX에 가까워지려고 노력하지만 여전히 몇 가지 결함이 있습니다.

관련 정보