删除电子邮件地址之前的文本

时间:2019-07-18 03:51:07

标签: regex unix awk sed cygwin

我有成千上万行混乱的行,其中包含电子邮件和其他数据。电子邮件地址之前显示的所有内容基本上是无用的,可以清除/删除/删除/切片-不确定正确的术语,对不起。

我倾向于将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

2 个答案:

答案 0 :(得分:1)

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

$ 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

但是当然先测试

答案 1 :(得分:0)

要删除电子邮件之前的所有内容(包括冒号在内),

sed 's/.*:\([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\)/\1/' file

通常sed不允许{2,6}没有选项,因此您可能有sed -Esed -r,在这种情况下,括号前的反斜杠可能应删除。