grep 검색 문자열에서 \를 사용하는 경우

grep 검색 문자열에서 \를 사용하는 경우

다음과 유사한 파일 콘텐츠가 있습니다.

A+B
C+D
A+B

이것은 문자열입니다. 의 발생을 검색하고 싶습니다 A+B. 그래서 명령을 다음과 같이 작성합니다 grep 'A+B' test.txt. 그런데 글을 써도 grep 'A\+B' test.txt아무런 결과가 나오지 않나요? +문자열 대신에 가 포함된 경우 .추가하거나 \추가하지 않으면 검색 결과를 얻습니다. 난 이해가 안 돼요:

1) 언제 추가해야 \하고 언제 추가하지 말아야 합니까?

2) 추가하면 결과가 +나오는데 추가하면 결과가 나오지 않는 이유.

답변1

grep어떤 맛을 사용하는지 지정하지 않았지만 GNU grep. 기본적으로 grep를 사용하며 Basic Regular Expressions다음에서 설명합니다 man grep.

기본 정규식과 확장 정규식

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

을 사용했다면 기본적으로 in 및 기타 많은 정규식 구문이 다음을 의미하므로 으로 -E전환하여 Extended Regular Expressions (ERE)사용해야 합니다 .\+ERE+one or more of the preceding character

$ grep -E 'A\+B' test.txt
A+B
A+B

따라서 귀하의 질문에 대답하려면 다음을 수행하십시오.

  1. \리터럴 문자를 검색하고 싶을 때 사용해야 합니다 .

  2. 단일 BRE점은 any characterin 과 같습니다 ERE.

답변2

egrep(또는 ) 에서는 grep -E확장 정규식이 활성화됩니다. 여기에는 다음이 포함됩니다.

+ - match one or more instances of the previous match pattern.

grep이는 리터럴을 만드는 일반적인 의미는 없지만 함수를 호출하는 앞에 백슬래시를 사용하여 기본적으로 사용할 수 있습니다 egrep.

따라서 다음은 동일합니다.

egrep 'A+B'
grep 'A\+B'

두 경우 모두 하나 이상의 s에 대한 일치 A와 바로 뒤에 가 있습니다 B.

'+' 에는 egrep특별한 의미가 있으므로 문자 그대로 일치하려면 이스케이프 처리해야 하므로 다음도 동일합니다.

egrep 'A\+B'
grep 'A+B'

A+B두 경우 모두 리터럴 '+'가 검색되므로 둘 다 일치합니다 .

egrep에서 이스케이프하여 사용할 수 있는 다른 함수에는 대체 일치 문자열 및 가 grep포함됩니다 . 여기서 M과 N은 일치 패턴의 최소 및 최대 반복 횟수를 나타내는 숫자입니다. 에서는 이스케이프되지 않습니다 .\|\{M,N\}egrep

관련 정보