파일에서 이메일을 수집하는 방법은 무엇입니까?

파일에서 이메일을 수집하는 방법은 무엇입니까?

추출해야 할 이메일 주소 목록이 많지만 올바른 방법을 찾을 수 없습니다.

데이터도 비슷하게 구성되어 있습니다.

Patabee meeta needo [email protected] pizz bees
Needo [email protected] hama lines question
unix search exchange [email protected] extracts

내 데이터에서 일관된 한 가지는 이메일 도메인입니다.

현재 나는 ...

grep -oniT @outlook.com /path/to/file/of/emails/and/such.txt

좋은 출력을 반환합니다 ..

3624   :@outlook.com
3625   :@outlook.com
3626   :@outlook.com
3630   :@outlook.com
3631   :@outlook.com
3632   :@outlook.com
3633   :@outlook.com
3634   :@outlook.com
3635   :@outlook.com

하지만 도메인(현재 검색 중인 도메인)뿐만 아니라 전체 이메일 주소를 선택하려면 이 정보가 필요합니다.

grep이 전체 행이 아닌 일치하는 문자열을 찾는 전체 필드를 선택하도록 하려면 어떻게 해야 합니까?

답변1

다음은 다음을 사용하는 솔루션입니다.grep:

grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" /path/to/file/of/emails/and/such.txt

파일의 모든 이메일 주소를 가져옵니다. 특정 도메인과만 일치하도록 정규식을 조정해야 할 수도 있습니다.

-E, --extended-regexp는 PATTERN을 확장 정규식으로 해석합니다.

-o, --only-matching 일치하는 줄 중 일치하는(비어 있지 않은) 부분만 인쇄합니다. 각 부분은 별도의 출력 줄에 표시됩니다.

답변2

-o패턴과 일치하는 부분만 인쇄되므로 를 포함하도록 패턴을 확장해야 합니다 @. 예제의 주소를 사용하면 공백이 아닌 부분을 포착할 수 있습니다.

$ grep -oniTE '[^[:blank:]][email protected]'  foo 
  1:    [email protected]
  2:    [email protected]
  3:    [email protected]

하지만 일반적으로 이메일 주소는딱딱한구문 분석을 위해(인용 공백을 포함할 수 있음) 위 코드는 일부 유효한 이메일 주소를 잃게 됩니다(일부 유효하지 않은 주소도 포함함). 예를 들어 참조하십시오.위키피디아그리고 잔혹한 세부 사항과 관련된 표준.

관련 정보