grep에서 일반 패턴 연산자 {m,n}을 사용하는 방법은 무엇입니까?

grep에서 일반 패턴 연산자 {m,n}을 사용하는 방법은 무엇입니까?

문자열 "tt"가 포함된 줄을 선택하기만 하면 되는 텍스트 파일이 있습니다. 그래서 명령줄에서 다음을 시도했습니다.

grep "t{2}" textfile

텍스트 파일에 "rotten" "litter" 등과 같은 단어가 포함되어 있다는 것을 알고 있지만 grep 명령은 어떤 줄도 표시하지 않고 상태 1로 종료됩니다.

나는 또 다른 일반적인 패턴을 시도했습니다.

grep "a.*x" textfile

이를 위해 작동합니다.

답변1

기본적으로,grep사용기본 정규식, grep이 여러 문자와 일치하도록 하려면 중괄호를 이스케이프해야 합니다.

grep 't\{2\}' textfile

또는 이 옵션을 사용할 수 있습니다 -E(또는GNU grep의 -P 옵션, 이는Perl 호환 정규식) grep사용확장 정규식, 이스케이프 없이 중괄호를 사용할 수 있습니다.

grep -E 't{2}'

답변2

중괄호를 이스케이프 처리해야 합니다.

grep 't\{2\}' textfile

그렇지 않으면 {리터럴 }문자로 처리됩니다.

답변3

-E( --extended-regexp) 또는 -P( ) 옵션을 사용해야 합니다 --perl-regexp(GNU grep 사용).

GNU grep(1) 매뉴얼 페이지에 따르면기본 정규식과 확장 정규식즉, 다음 옵션을 사용하지 않기로 선택한 경우:

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

관련 정보