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