추출해야 할 이메일 주소 목록이 많지만 올바른 방법을 찾을 수 없습니다.
데이터도 비슷하게 구성되어 있습니다.
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]
하지만 일반적으로 이메일 주소는딱딱한구문 분석을 위해(인용 공백을 포함할 수 있음) 위 코드는 일부 유효한 이메일 주소를 잃게 됩니다(일부 유효하지 않은 주소도 포함함). 예를 들어 참조하십시오.위키피디아그리고 잔혹한 세부 사항과 관련된 표준.