0

所有的电子邮件都保存在一个文本文件中,但没有任何空格,而且每行很多。正在寻找一种使用 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

4 回答 4

4

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

基本上你可以这样做:

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

你可以添加更多的顶级域名。

如果您的文本文件用空字符分隔,您可以这样做:

xargs -0 printf "%s\n" < our_company_emails.txt | sort
于 2013-09-23T11:27:14.790 回答
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 的建议更正
  • 还涵盖用户名包含点(。)和域后缀的情况
于 2013-09-23T11:32:24.163 回答
0

试试这一行:

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

输出:

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

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

于 2013-09-23T11:31:18.110 回答
0

这可能对您有用(GNU sed):

sed 's/test1/\n&/2g' file
于 2013-09-23T15:31:53.193 回答