我有成千上万行混乱的行,其中包含电子邮件和其他数据。电子邮件地址之前显示的所有内容基本上是无用的,可以清除/删除/删除/切片-不确定正确的术语,对不起。
我倾向于将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
答案 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 -E
或sed -r
,在这种情况下,括号前的反斜杠可能应删除。