정규식 패턴 문제

정규식 패턴 문제

안녕하세요, 제 스크립트에는 다음과 같은 awk가 있습니다. 정규식 패턴이 제대로 작동하지 않습니다. [az],[0-9],[.],@ 문자가 포함될 수 있는 이메일 주소를 확인하고 싶습니다.

암호

here are the sample email patterns in the input file
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

스키마는 메타데이터 파일에서 추출되어 스크립트 매개변수로 전달됩니다. 여기의 메타데이터 줄은 이메일 ID 확인을 위한 스키마를 정의합니다.

1~4~~문자~Y~\"\@\.com\"~100

sh -x 스크립트 코드 실행

val=$(
     awk -F , 
         -v n=4
         -v 'm="*@*.com"'
         -v count=0 
         'NR!=1 && $n !~ "^" m "$"
                      {
                         printf "%s:%s:%s\n", FILENAME, FNR, $0 > "/dev/stderr"
                         count++
                       }
                       END {print count}' BNC.csv

vi 스크립트 코드

val=$(awk -F "$sep"
        -v n="$col_pos" 
        -v m="$col_patt" 
        -v count=0 
        'NR!=1 && $n !~ "^" m "$" 
                       {
                         printf "%s:%s:%s\n", FILENAME, FNR, $0 > "/dev/stderr"
                         count++
                       }
                       END {print count}' $input_file 

답변1

이메일 주소를 확인하는 방법을 찾고 있다면 FWIW, 다음은 트릭을 수행하는 오래된 awk 스크립트에 있는 것입니다.

    # valid addrs regexp from http://www.regular-expressions.info/email.html
    # Specifically do NOT want to use [:alpha:] to drop Asian characters etc
    # Added a check that we have at least 2 consecutive alphabetic characters
    # both before and after the "@" to get rid of [email protected] etc. garbage
    (addr ~ /^[0-9a-zA-Z._%+-]+@[0-9a-zA-Z.-]+\.[a-zA-Z]{2,}$/) &&
    (addr ~ /^.*[a-zA-Z]{2}.*@.*[a-zA-Z]{2}.*\.[a-zA-Z]{2,}$/)

나는 그것이 하나의 정규식으로 결합될 수 있다고 확신하지만 그렇게 하는 것에 별로 관심이 없으며 최종 결과가 명확하지 않을 수도 있습니다.

관련 정보