2017-10-02 1 views
0

내가 사용하여 GREP은

다음 우분투

에 그렙를 사용하여 테스트라는 이름의 파일에서 패턴을 검색하려고이 웹 사이트 regexp simulator, 내가 사용하는 다음과 같은 패턴에 시험

./foldera/[hello]this.mp4 
./foldera/folderb/[hello]that.mp4 
./folderc/[these]hello.mp4 

의 내용입니다 검색하고 작동하면 세 줄이 일치합니다.

.*\/[A-Za-z0-9\[\]]+\.mp4 

그러나 우분투에서

, 나는 아무것도 터미널에 반환했다, 터미널에서 다음 명령이 작동하지 않습니다 달렸다.

[email protected]:~$ cat ~/Desktop/test 
./foldera/[hello]this.mp4 
./foldera/folderb/[hello]that.mp4 
./folderc/[these]hello.mp4 
[email protected]:~$ cat ~/Desktop/test | grep -E '.*\/[A-Za-z0-9\[\]]+\.mp4' 
[email protected]:~$ 

grep이 파일의 모든 행을 검색 할 수없는 이유는 무엇입니까?

답변

0

grep 확장 정규식은 대괄호 안에 대괄호를 이스케이프 처리하기 위해 백 슬래시를 사용하지 않습니다. 적절한 방법은 대괄호 안에 첫 번째 문자로 ]을 넣는 것입니다. 이것은 빈 문자 집합을 가질 수 없기 때문에 리터럴 문자로 처리됩니다.

grep -E '/[]A-Za-z0-9[]+\.mp4' test.txt 

처음에는 .*이 필요하지 않습니다. grep은 줄의 내용이 패턴과 일치하는지 단순히 확인하기 때문에 시작 또는 끝 부분에 일치 항목을 추가하는 것은 중복됩니다 (일치하는 줄의 일부만 인쇄하려면 -o을 사용하는 경우에만 필요함).

+0

모든 표현식은 백 슬래시를 사용하여 대괄호 안의 대괄호를 이스케이프하도록 허용합니까? 감사합니다 –

+0

@LeeTimothy 예, PCRE 기반의 대부분의 regexp 엔진에 사용됩니다. – Barmar

관련 문제