2013-07-22 5 views
2

egrep -o -e을 사용하는 파일에서 전자 메일 주소를 가져오고 줄 끝에 문제가있는 경우 나는이 이메일 주소의 모든 변화를 따라 잡을 수 없습니다 실현regex negative lookahead 사용 방법

egrep -o -e "[._a-zA-Z0-9][email protected][._a-zA-Z0-9]+.[._a-zA-Z0-9]+" ~/myfile.txt 

하지만 주소가 줄의 끝에있는 경우 이것은 내가 무엇을 얻을 : 여기

내 정규식

[email protected][email protected]\ul 

그래서 나는 부정적 예측을 시도 할 것이라고 생각했지만 올바르게 사용하는 방법을 모릅니다. 온라인에서 몇 가지 사항을 읽었지만 어떻게 작동하는지 혼란 스럽습니다.

egrep -o -e "(?!\\[._a-zA-Z0-9][email protected][._a-zA-Z0-9]+.[._a-zA-Z0-9]+)" ~/myfile.txt 

배쉬는 event not found: \\[._a

어떤 제안이와 함께 실패

이 내가 해봤 무엇인가?

답변

2

도트는 무엇을 나타 냅니까?

"[._a-zA-Z0-9][email protected][._a-zA-Z0-9]+.[._a-zA-Z0-9]+" 
          ^
          here 

이것은 at 기호와 일치합니다. 그것을 제거하면 lookahead가없는 원래 정규식이 작동합니다.

또한 !은 bash (내역 확장)의 특수 문자입니다. 문자 그대로 사용하려면 백 슬래시를 사용해야합니다.

+0

전자 메일 주소의 점과 일치해야합니다. '.com' 영리하지 않니? –

+0

이것은 나를 위해 ... :('egrep -o -e "(? \! \\ [._ a-zA-Z0-9] + @ [._ a-zA-Z0-9] +) 작동하지 않았다. [._a-zA-Z0-9] +) "~/myfile.txt' –

+1

@ code4me : 점은 정규 표현식에서 특수하며, 어떤 것과도 일치합니다. 점을 문자 그대로 표시하려면'\ .' 또는'[.]'를 사용하십시오. – choroba

3

!은 bash의 내역 확장 명령으로 보간 중입니다. 이를 방지하려면 큰 따옴표가 아닌 작은 따옴표를 사용해야합니다.

그러나 grep 버전에서는 부정적 예측이 지원되지 않을 수 있습니다. 이 경우 perl 또는 ack과 같은보다 강력한 정규식 도구가 필요합니다.

+0

나는이'egrep - (.! a-zA-Z0-9) + @ [.A-ZA-Z0-9] +. [.A-ZA-Z0-9] +) '~/myfile.txt '행운은 없다. –