我必须判断CSV中的列,以找到有效的邮箱并保留它们,同时从该列中删除无效数据.我已经有一个带有简单正则表达式的AWK命令,但一些无效的邮箱没有用它过滤.以下是该命令
awk 'BEGIN{FS=OFS=","}{$1=match($1,/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}/)?substr($1,RSTART,RLENGTH):"";print}'
但我想用与RFC5322兼容的正则表达式替换此正则表达式模式.我找到了下面的正则表达式,但当我将它添加到上面的awk命令中时,它不起作用.请帮我把这个正则表达式模式插入到上面的AWK命令中
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
CSV示例如下
-pedja-@mail.ru,abd
0.5maratonac@gmail.com,534
00dovla.@gmail.com,5rfrf
015.josa@gmail.com,54rf
02142..6584@nadlanu.com,54r4
0616080668.boki@gmail.com,5443
0@0..com,344545
.100.three.7@gmail.com,64
10867249ld@emailgg.xyz,54444
我在指挥部下面试过了
awk 'BEGIN{FS=OFS=","}{$1=match($1,/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}/)?substr($1,RSTART,RLENGTH):"";print}'
预期yields
-pedja-@mail.ru,abd
0.5maratonac@gmail.com,534
,5rfrf
015.josa@gmail.com,54rf
,54r4
0616080668.boki@gmail.com,5443
,344545
,64
10867249ld@emailgg.xyz,54444
john@,4355
(00dovla.@gmail.com,02142..6584@nadlanu.com,0@0..com,.100.three.7@gmail.com,john@) are not valid emails and they are removed)