我有一些电子邮件,其中一个和另一个之间有空格 有时甚至是单个电子邮件......这是一个情况示例:
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
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
我做错了什么?
答案 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