首页 > 解决方案 > 删除电子邮件地址前的文字

问题描述

我有数十万条主要是杂乱无章的行,其中包含电子邮件和其他数据。出现在电子邮件地址之前的所有内容基本上都是无用的,并且可以清除/删除/删除/切片 - 不确定术语是否正确,抱歉。

我倾向于将 Cygwin 用于这些类型的事情,但一直在苦苦挣扎。这是我通常倾向于使用的电子邮件正则表达式:

[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}

输入:

Dog:email@email.com:cat
Pab:email1@hotmail.com:dog
cat:horse:email@jenga.de:cat
bike:michael:david:xenon@gmail.com:cat
inter@outlook.com:bob

期望的输出:

email@email.com:cat
email1@hotmail:dog
email@jenga.de:cat
xenon@gmail.com:cat
inter@outlook.com:bob

标签: regexunixawksedcygwin

解决方案


您的正则表达式工作正常:

$ awk 'match($0,/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}/){print substr($0,RSTART,RLENGTH)}' file
email@email.com
email1@hotmail.com
email@jenga.de
xenon@gmail.com
inter@outlook.com

$ awk 'match($0,/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}/){print substr($0,RSTART)}' file
email@email.com:cat
email1@hotmail.com:dog
email@jenga.de:cat
xenon@gmail.com:cat
inter@outlook.com:bob

由于您使用的是 cygwin,因此您拥有 GNU awk,它具有“就地”编辑功能:

awk -i inplace 'script' file

但当然要先测试


推荐阅读