매뉴얼 페이지 읽기 grep
(강조)
정기적인 표현 방식 정규식은 문자열 집합을 설명하는 패턴입니다. 정규 표현식은 다음과 같습니다. 산술식과 유사하며, 다양한 연산자를 사용하여 결합 더 작은 표현. grep정규식 구문의 세 가지 다른 버전인 "기본"(BRE), "확장"(ERE) 및 "perl"(PCRE). GNU에서는 grep 사용 가능한 내용에는 차이가 없습니다. 기본 문법과 확장 문법 간의 기능.
더 아래쪽에 써있어요
반복하다 정규식 뒤에는 여러 반복 연산자 중 하나가 올 수 있습니다. ? 앞의 항목은 선택 사항이며 최대 한 번 일치할 수 있습니다. * 이전 항목은 0번 이상 일치합니다. + 이전 항목이 한 번 이상 일치합니다. {N} 이전 항목이 정확히 n번 일치합니다. {N,} 이전 항목이 n번 이상 일치합니다. {,쌀} 이전 항목은 최대 m번 일치합니다. 이것은 GNU 확장입니다. {N,쌀} 앞의 항목이 n번 이상 일치하지만 m번 이하로 일치합니다.
마지막 줄이 다음과 같기 때문에 GNU의 grep을 사용하고 있다고 생각합니다.
User Commands GNU grep 2.16 GREP(1)
그렇다면 $ echo aa | grep a{2}
포함이 예상대로 작동하는데 왜 아무 것도 출력할 수 없습니까?-E
답변1
여기서 미묘한 점은 차이가 없지만특징, 거기예차이점통사론. 특히:
- BRE에서
{
and는}
이스케이프되지 않는 한 리터럴입니다. 이 경우 수량자 표현식을 나타냅니다.
하지만
- ERE에서 이스케이프되지 않는 한 수량자를 묶
{
습니다}
. 이 경우 수량자는 리터럴입니다.
그래서
$ echo aa | grep 'a\{2\}' # BRE
aa
$ echo aa | grep -E 'a{2}' # ERE
aa
표현식을 따옴표로 묶지 않으면 쉘이 백슬래시를 확장하지 못하도록 백슬래시를 이스케이프 처리해야 합니다.
$ echo aa | grep a\\{2\\} # BRE
aa
답변2
매뉴얼 페이지 아래 섹션을 참조하십시오.
기본 정규식과 확장 정규식
In basic regular expressions the meta-characters ?, +, {, |, (, and )
lose their special meaning; instead use the backslashed versions \?,
\+, \{, \|, \(, and \).