
다음과 유사한 파일 콘텐츠가 있습니다.
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
따라서 귀하의 질문에 대답하려면 다음을 수행하십시오.
\
리터럴 문자를 검색하고 싶을 때 사용해야 합니다 .단일
BRE
점은any character
in 과 같습니다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