\백슬래시 문자 및 grep의 .

\백슬래시 문자 및 grep의 .

grep의 백슬래시 문자 \와 작은따옴표가 혼란스럽습니다. 내 이해로는 문자 그대로의 의미를 유지합니다. 예를 들어

내가 이렇게 하면 echo 'This is \.나에게 줄 것이다This is \.

그러나 실제 .(마침표)와 일치시키려면 '\.'라는 특별한 의미를 사용해야 합니다. 정규식에서. 예를 들어, 다음에서 가져온 데모.txt 파일이 있는 경우이 사이트의 예

문제 출력

내 질문은 이 경우 " "가 grep의 문자 그대로의 값을 어떻게 보존하지 않는가입니다. 이것은 나에게 매우 혼란스러운 것으로 판명되었습니다. 어떤 설명이라도 매우 도움이 될 것입니다.

답변1

작은따옴표는 문자가 해석되지 않도록 보호합니다.껍데기이지만 grep여전히 매개변수를 정규식으로 처리합니다.

-F또는 옵션을 사용하여 grep을 실행하여 이 동작을 끌 수 있습니다 --fixed-strings.

grep -F 'purchase.' demo.txt

p, , , , , 또는 문자 중 어느 것도 쉘 u에 특별한 문자 가 아니기 때문에 작은따옴표가 필요하지 않습니다 .rchase.

grep -F purchase. demo.txt

또는 이스케이프된 정규식 연산자 grep없이 -F사용할 수 있습니다 ..\

grep 'purchase\.' demo.txt

작은 따옴표 \(셸에도 특별하며 거기에 따옴표 연산자가 있음)는 문자 그대로 에 전달됩니다 grep. 또는 \셸 따옴표 연산자를 사용하여 자체를 인용할 수 있습니다.

grep purchase\\. demo.txt

[set]정규식 연산자를 사용하여 텍스트를 일치시킬 수도 있습니다 ..

grep 'purchase[.]' demo.txt

다시 한 번 [set]그렇습니다.반품따라서 쉘 연산자(와일드카드 연산자)도 따옴표로 묶어야 합니다(여기서는 작은 따옴표가 다시 사용됨).

관련 정보