이 거대한 이메일 데이터 세트를 수정하는 방법은 무엇입니까?

이 거대한 이메일 데이터 세트를 수정하는 방법은 무엇입니까?

나는 이메일로 구성되어야 하는 매우 큰 데이터 세트를 가지고 있습니다. 그러나 파일에서 완전히 제거해야 하는 유효하지 않은 이메일이 많이 있습니다.

여기 몇 가지 예가 있어요.

89 is @msn .com
[email protected]
89%@yahoo.com
89%[email protected]
89&#39:[email protected]
89'[email protected]
89'[email protected]
89&[email protected]
89+475asdjkl:[email protected]
89+475asdjkl;[email protected]
[email protected]

파일에서 유효하지 않은 이메일이 포함된 줄을 쉽게 제거할 수 있는 방법이 있습니까?

답변1

편집하다:지적한대로@ivannivan, 스크립트를 작성하지 않고도 grep에서 이 정규식을 사용할 수 있습니다.

grep "^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$" my_email_list.txt >> my_valid_emails.txt

간단한 스크립트로 이 문제를 해결할 수 있습니다. 위에 댓글처럼@ilkkachu그리고@markplotnick, 그 중 일부 예는 완벽하게 유효한 이메일 주소입니다.

email_validate.sh:

#!/bin/bash

# email regex check
email_valid="^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$"

# set field separator to new lines
IFS=$'\n' 
# for loop checking line against regex above
for line in $(cat my_email_list.txt); do
    if [[ $line =~ $email_valid ]]; then
        echo "$line is valid"
    else
        echo "$line is invalid"
    fi
done

예제 출력:

┌─[root@Fedora]─[~]─[03:27 pm]
└─[$]› ./email_validate.sh
89 is @msn .com is invalid
[email protected] is valid
89%@yahoo.com is valid
89%[email protected] is valid
89&#39:[email protected] is invalid
89'[email protected] is invalid
89'[email protected] is invalid
89&[email protected] is valid
89+475asdjkl:[email protected] is invalid
89+475asdjkl;[email protected] is invalid
[email protected] is valid

실행 중인 파일에서 해당 항목을 제거해야 하는 경우 sed '/$line/d'if 문을 추가하면 됩니다. 이전 파일을 참조해야 하는 경우를 대비해 유효한 이메일을 새 파일로 옮기는 것이 개인적으로 권장되지만

    if [[ $line =~ $email_valid ]]; then
        echo "$line is valid"
        echo "$line" >> my_valid_emails.txt
    else
        echo "$line is invalid - deleting"
    fi

그러면 다음과 같은 내용이 반환됩니다.

┌─[root@Fedora]─[~]─[03:34 pm]
└─[$]› cat my_valid_emails.txt
[email protected]
89%@yahoo.com
89%[email protected]
89&[email protected]
[email protected]

관련 정보