정규 표현식의 반복은 더 이상 결과를 표시하지 않습니다.

정규 표현식의 반복은 더 이상 결과를 표시하지 않습니다.

아래와 같이 Ubuntu 플랫폼이 설치된 Windows-10 시스템이 있습니다 uname -a.

Linux DOMINIQUEDS 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux

많은 항목이 포함된 파일이 있습니다. 예를 들면 다음과 같습니다.

18bd6344        mfc110u!CPtrArray        Size:[1046]
18bd63f4        mfc110u!CPtrArray        Size:[1046]
18bd64a4        mfc110u!CPtrArray        Size:[1046]
18bdcef4        mfc110u!CPtrArray        Size:[4]
18bdcfa4        mfc110u!CPtrArray        Size:[8]
18bdd054        mfc110u!CPtrArray        Size:[49]
18bdd104        mfc110u!CPtrArray        Size:[498]
18bdd1b4        mfc110u!CPtrArray        Size:[498]

언급된 크기는 1부터 수백만까지입니다. 저는 더 큰 크기, 예를 들어 최소한 세 자리 숫자가 포함된 크기에 관심이 있습니다.

다음 정규식을 사용하여 이 작업을 수행할 수 있습니다.

grep "Size:\[[0-9][0-9][0-9]" Log1.log // this is working fine

다음 정규식은 동일한 결과를 제공할 것으로 예상합니다.

grep "Size:\[[0-9]{3,}" Log1.log

하지만 나는 아무것도 얻지 못했습니다.

방금 확인해보니 man grep설명은 다음과 같습니다.

...
반복
...
{n,} 이전 항목을 n회 이상 일치합니다.

그렇다면 왜 이것이 작동하지 않습니까?

답변1

Ubuntu에 있으므로 GNU grep이 있는 것 같습니다. 이것매뉴얼 페이지또한 다음과 같이 말했습니다.

grep은 정규식 구문의 세 가지 다른 버전인 "기본"(BRE), "확장"(ERE) 및 "perl"(PCRE)을 이해합니다. GNU grep에서는 기본 구문과 확장 구문 간에 사용 가능한 기능에 차이가 없습니다. 다른 구현에서는 기본 정규 표현식이 덜 강력합니다. 다음 설명은 확장 정규식에 적용됩니다.;기본 정규 표현식의 차이점이 요약되어 있습니다.

그런 다음:

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

\{3,\}따라서 해당 플래그를 사용하거나 사용하여 -EERE를 활성화 해야 합니다 . 나는 후자를 추천한다. 백슬래시는 어디에서나 아주 빨리 보기 흉해질 수 있기 때문이다.

관련 정보