【问题描述】
从以下信息中提取联系人邮箱地址,内容如下:
, 李俊清 , 任翔 , 李杨柳 , 孟津 , 王立光
【解决办法】
1.awk
$awk '{for(i=1;i<=NF;i++) if($i ~ "<" ) {print gensub(/<(.+)>.*/,"\\1","g",$i)} }' a.txt yongbo.shan@mm.comjunqing.li@mm.comxiang.ren@mm.comyangliu.li@mm.comjin.meng@mm.comliguang.wang@mm.com$awk '{for(i=1;i<=NF;i++) if($i ~ "<" ) {print $i} }' a.txt |awk -F '<|>' '{print $2}'yongbo.shan@mm.comjunqing.li@mm.comxiang.ren@mm.comyangliu.li@mm.comjin.meng@mm.comliguang.wang@mm.com
2.sed与awk结合
$sed -r 's#,##g' a.txt |tr ">" "\n" |awk -F '<' '{print $NF}' |sed '/^\s*$/d'yongbo.shan@mm.comjunqing.li@mm.comxiang.ren@mm.comyangliu.li@mm.comjin.meng@mm.comliguang.wang@mm.com
sed '/^\s*$/d'删除空行
3.grep
法一:
$grep -oP '(?<=<)(.*?)(?=>)' a.txt yongbo.shan@mm.comjunqing.li@mm.comxiang.ren@mm.comyangliu.li@mm.comjin.meng@mm.comliguang.wang@mm.com
法二
[root@test ~]# echo ', 李俊清 ' |grep -oP '\b[^<]+(?=>)' yongbo.shan@mm.comjunqing.li@mm.com
法三
[root@test ~]# echo ', 李俊清 ' |grep -oP '(?<=<)[^>]+\b'yongbo.shan@mm.comjunqing.li@mm.com
【附录】
仅提取用户名
法一
其中\b[\w|\.]+(?=@\b)匹配以@结尾的单词前面的大于一个的'单词字符(字母数字下划线)'或'.'的组合字符,显然不包括"<",这里匹配上的就是用户名,<yongbo.shan@mm.com>
[root@test ~]# echo ', 李俊清 ' |grep -oP '\b[\w|\.]+(?=@\b)' yongbo.shanjunqing.li
法二
[root@test ~]# echo ', 李俊清 ' |grep -oP '[^<]+(?=@\b)' yongbo.shanjunqing.li
法三
[root@test ~]# echo ', 李俊清 ' |grep -oP '(?<=<)[^@]+\b'yongbo.shanjunqing.li