删除电子邮件地址前的文字

Remove text before email address

我有成百上千行乱七八糟的行,其中包含电子邮件和其他数据。出现在电子邮件地址之前的所有内容基本上都是无用的,可以是 purged/deleted/removed/sliced - 不确定术语是否正确,抱歉。

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

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

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

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

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

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

$ awk 'match([=10=],/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}/){print substr([=10=],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,它具有 "inplace" 可用的编辑功能:

awk -i inplace 'script' file

但当然先测试