在电子邮件地址后添加换行符

时间:2013-09-23 11:22:22

标签: regex linux bash sed awk

所有电子邮件都保存在文本文件中,但没有任何空格和每行多个。 寻找一种使用Linux的方法,使用电子邮件的正则表达式对它们进行排序。

our_company_emails.txt:

    test1@sampleemail.comtest1@sampleemail.biztest1@sampleemail.infotest1@sampleemail.net

期望的输出:

    test1@sampleemail.com
    test1@sampleemail.biz
    test1@sampleemail.info
    test1@sampleemail.net

4 个答案:

答案 0 :(得分:4)

我想知道你的文本文件是否实际上用空字符(0x00)分隔。

基本上你可以这样做:

grep -oE '[^@]+@[^@]+\.(com|net|biz|info)' our_company_emails.txt | sort

你可以添加更多的tld。

如果文本文件以空字符分隔,则可以改为:

xargs -0 printf "%s\n" < our_company_emails.txt | sort

答案 1 :(得分:2)

最简单的你可以做到:

sed -r 's/([[:alnum:]]@[[:alnum:]]+\.)(com|info|biz|net)/\1\2\n/g' our_company_emails.txt
test1.asdf@sampleemail.com
test1.net@sampleemail.biz
test1@sampleemail.info
test1@sampleemail.net
bob@comcast.net

添加新域名,必要时进行修改......

编辑:

  • 根据Ed Morton的建议更正
  • 还包括用户名包含点(。)和域后缀
  • 的情况

答案 2 :(得分:0)

试试这一行:

sed -r 's/(.)(test1@)/\1\n\2/g' file

输出:

test1@sampleemail.com
test1@sampleemail.biz
test1@sampleemail.info
test1@sampleemail.net

group1 (.),仅用于在第一个电子邮件地址上跳过替换。

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed 's/test1/\n&/2g' file