grep은 \ $를 어떻게 해석합니까?


답변:


18

해석되는 \$등 그렙로를 통과 $광고 문자의 끝. 따라서 라인이 끝났다고 가정하면 일치합니다 :-)

$grep에서 실제와 일치 시키려면 다음 중 하나를 사용하십시오.

grep \\\$
grep '\$'

이전에, 쉘 해석은 \\같은 \\$같은 $, 부여 \$. 후자에서는 전혀 해석하지 않습니다.


\$두 문자 시퀀스가 ​​아닌 달러 기호와 왜 일치 하는지에 대한 귀하의 질문에 관해서 는, grep어떤 목적으로 특수 문자를 사용 하는 것과 같은 정규 표현식이 사용 됩니다. 그 중 일부는 다음과 같습니다.

$       end of line
^       start of line
.       any character
+       1 or more of the preceeding pattern
*       0 or more of the preceeding pattern
{n,m}   between n and m of the preceeding pattern
[x-y]   any character between x and y (such as [0-9] for a digit).

많은 다른 사람들과 함께.

일반적으로 특수 문자로 취급되는 문자를 일치 시키려면이 문자를 이스케이프 grep처리하여 일반 문자로 취급해야합니다.


1
grep가 보는 것을 테스트하기 위해 시도한 echo \$다음echo \\$

grep \\\ $에서 말했듯이 \ $는 grep에 전달되므로 \ $가 포함 된 문자열과 일치해야하지만 $가 포함 된 문자열과 일치하는 이유는 무엇입니까?

grep에서 $는 줄의 끝을 의미하기 때문입니다. 문자 $와 일치 시키려면 grep이 특수하게 처리하지 않도록 이스케이프해야합니다. 내 업데이트를 참조하십시오.

@Pasi : echo는 쉘 내장 여부, POSIX 호환 여부 등에 따라 자체 이스케이프 처리를 수행합니다. (IMHO) 사용하는 것이 더 ls \$좋고 (ls : $ : 해당 파일이나 디렉토리가 없음), \ $가 $로 이스케이프 처리되지 않았지만 \\ $가 \ $로 이스케이프 처리되지 않음 등을 확인하십시오.
Henno

5

쉘은 먼저 인수를 프로그램에 전달하기 전에 모든 이스케이프 시퀀스를 확장하므로 이스케이프 시퀀스로 해석 \$하고 단일 인수 $grep행 끝과 일치시키는 로 전달합니다 . 모든 줄에는 끝이 있으므로 모든 줄은 다음과 일치해야합니다. :)


그러나 $는 어떻게 끝입니까? 줄 끝이 \ n 아닌가?

2
@Happy Mithal : 참조 man grep; 결정되었다 $관계없이 선에 의해 분리되어 있는지 여부의 라인의 끝과 일치하는 \n, \r완전히 다른 둘 또는 무언가. 일반적인 경우 정규식을 사용하여“줄”뿐만 아니라 모든 문자열을 일치시킬 수 있으며 문자열 $의 끝을 일치시키는 데 사용됩니다.

2

줄 끝 메타 문자로 해석되고 있습니다. 실제 달러 기호와 일치 시키려면

 $ grep \\$ 

또는

 $ grep '\$' 

1

^문자열의 시작과 $끝입니다.

grep \$

또는

grep $

모든 문자열과 일치하므로 입력 한 내용이 모두 에코됩니다.

시험

grep a$

이제 마지막 문자가있는 문자열 만 a일치하고 에코 됩니다.


1

$문자 클래스의 정규식을 사용하여 리터럴을 검색하려는 경우 이스케이프 처리 문제를 줄일 수 있습니다 . 예를 들어

$ grep '[$]' file
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.