2013-10-02 2 views
0

패턴에서 \ $를 사용할 때 grep end egrep의 다른 동작을 이해할 수 있습니다.egrep 및 grep과 달러 차이

더 구체적으로 :

grep "\$this->db" file # works 

egrep "\$this->db" file # does not work 

egrep "\\$this->db" file # works 

어떤 하나의 이유를 말해 또는 일부 설명을 연결할 수 있습니까? 대단히 감사합니다.

답변

1

쉘의 이스케이프 처리로 백 슬래시를 먹었으므로 처음 두 경우에 정규 표현식은 $this->db입니다. 차이점은 grep은 일반 문자로 정규 표현식의 끝 부분에없는 $을 처리하지만 egrep은 행의 끝과 일치하는 정규 표현식으로 취급합니다.

이중 백 슬래시로 인해 백 슬래시가 egrep으로 전송됩니다. 이것은 $을 이스케이프 처리하므로 줄 끝과 일치하는 것이 아니라 일반 문자로 처리됩니다.

1

man grep를 참조하십시오 정규식은 백 슬래시와 같은 메타 문자 (egrep의 사용을 통해) 활성화 된 경우

-E, --extended-regexp 
       Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.) 

백 슬래시로 이스케이프해야합니다. 따라서 리터럴 백 슬래시와 일치 시키려면 \\이 필요합니다.