用空格检查邮件

时间:2013-12-23 15:17:56

标签: regex bash email

我有一些电子邮件,其中一个和另一个之间有空格 有时甚至是单个电子邮件......这是一个情况示例:

  1. line1 - yyy@zzz.com sss@xxx.it ddd@rrr.biz yyy@zzz.pr ecc。 ECC。
  2. line2 - yyy@ddd.com(没有最终空格) ecc.ecc。
  3. 这是我的代码:

    regex="^[-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}"
    if [[ "$mail" =~ $regex ]];
    then
        echo "OK $mail"
    else
        echo "WARNING CHECK: $mail"
    fi
    done
    

    如何在正则表达式中输入空格而不会在单个电子邮件中出现错误?

    更新2

    我有以逗号分隔的更新列表xls

    • 第1行 - FIELD1,pippo @ gmail.com,darth @ gmail.com
    • line2 - FILED1,pippo @ gmail.com,darth @ gmail.com,sampei @ gmail.com

    output =(awk -F',' - var =“$ awkvar”'$ 1 == var {print $ 2,$ 3,$ 4} spreadsheet.txt)

    但awk在输出开头删除了一些字母

    echo“$ output”

     ippo@gmail.com darth@gmail.com
    pippo@gmail.com darth@gmail.com sampei@gmail.com
    

    但如果我删除$ 4

    output =(awk -F',' - var var =“$ awkvar”'$ 1 == var {print $ 2,$ 3} spreadsheet.txt)

    echo“$ output”

    它是第1行的正确显示,但不适用于第2行:

    pippo@gmail.com darth@gmail.com
    pippo@gmail.com darth@gmail.com 
    

    我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用egrep -o分别使用相同的正则表达式捕获每封电子邮件:

> s='yyy@zzz.com sss@xxx.it ddd@rrr.biz yyy@zzz.pr'
> egrep -o "[-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}" <<< "$s"
yyy@zzz.com
sss@xxx.it
ddd@rrr.biz
yyy@zzz.pr

编辑:我想在此处添加email addresses can contain spaces (between quotes)

答案 1 :(得分:1)

逐行读取数据到数组中(行中的每个单词都以空格分隔):

re='^[[:alnum:]_.+-]+@[[:alnum:]_.+-]+\.[[:alnum:]]{2,4}$'
while read -ra addresses; do
     for addr in "${addresses[@]}"; do
         if [[ $addr =~ $re ]]; then
             echo "OK $addr"
         else
             echo "WARNING CHECK: $addr"
         fi
     done
done <<END
yyy@zzz.com sss@xxx.it ddd@rrr.biz yyy@zzz.pr ecc. ecc.
yyy@ddd.com ecc.ecc.
a@b.c
first@last
name@subdomain.domain.com
END
OK yyy@zzz.com
OK sss@xxx.it
OK ddd@rrr.biz
OK yyy@zzz.pr
WARNING CHECK: ecc.
WARNING CHECK: ecc.
OK yyy@ddd.com
WARNING CHECK: ecc.ecc.
WARNING CHECK: a@b.c
WARNING CHECK: first@last
OK name@subdomain.domain.com

验证电子邮件地址看起来比较棘手。这是一个有效的电子邮件地址:

(Glenn Jackman) "Glenn Jackman" @ some.domain.example.com