
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'
두 문자 문자열을 검색합니다 . {1
POSIX.2에서는 이 동작을 확장으로 허용하지만 이식 가능한 스크립트에서는 이를 피해야 합니다.
따라서 grep은 가능한 한 POSIX에 가까워지려고 노력하지만 여전히 몇 가지 결함이 있습니다.