如何使用通用电子邮件地址替换一组文件中的所有电子邮件地址

时间:2016-11-15 13:17:35

标签: regex linux unix sed

我有一些脚本在不同的域中有很多电子邮件地址(比如domain1.comdomain2.com。我想用公共域中的一些通用电子邮件地址替换所有这些脚本,例如{{1保持脚本的其余部分相同。

我在domain.com下面使用,但它似乎不起作用。 (它返回相同的输出作为输入,所以看起来搜索不匹配。但是,当我在在线测试器中测试正则表达式sed时,它似乎与电子邮件地址匹配。)

  

\S+@\S+/

例如,我有2个脚本

s/\S+@\S+/genericid@domain.com/g

$ cat script1.sh abcd.efg@domain.com export SENDFROM="xyz@domain1.com" blah_4 $ cat script2.sh echo foo|mailx -s "blah" pqr@domain2.com,def@domain.com,some@domain.com omg@domain.com foo abc@domain.com bar 之后的结果应该是

sed -i

我正在使用$ cat script1.sh genericid@domain.com export SENDFROM="genericid@domain.com" blah_4 $ cat script2.sh echo foo|mailx -s "blah" genericid@domain.com,genericid@domain.com,genericid@domain.com genericid@domain.com foo genericid@domain.com bar

有什么建议吗?

更新: 我设法让它与Linux 3.10.0-327.28.2.el7.x86_64一起使用。之前's/\S\+@\S\+.com/genericid@domain.com/g'有2个问题。

  • search之前需要+
  • 由于文件中有其他\行(for 数据库连接),我必须在最后添加@,就像我的所有 地址以.com
  • 结尾

4 个答案:

答案 0 :(得分:2)

使用正则表达式捕获电子邮件地址可能比看起来更难。 无论如何,为了替换域名,我认为您可以简单地认为电子邮件域名在找到时启动:

1 alphanum char + @ + N alphanum chars + . + N alphanum chars

基于这种偏见,在javascript中我会这样做:

  

(\ W @)(\ W *。\ W *)

替换为:

  

$ 1newdomain.com

希望它对你有所帮助。

答案 1 :(得分:1)

更新 - 其他答案以及对此问题的评论指出,您可能需要采取额外步骤来启用速记字符类匹配;我习惯在perl中使用正则表达式,这只是有用的,所以没想到要解决这种可能性。这个答案仅解决了在正则表达式运行后如何改进匹配的问题。

-

虽然将电子邮件地址与正则表达式匹配的问题可能非常复杂(事实上,在最常见的情况下,真正的正则表达式是不可能的),您可能可以处理您的特定情况。

你所遇到的问题是\ S匹配任何非空格,所以address@something.com,address@somethingelse.com,其中两个地址之间没有空格,匹配不正确。

所以有几种方法可以解决它,基于你真实会看到哪种类型的地址。一种解决方案是用\S替换 [^\s,]实例(注意小写s),它只是从匹配和空格中排除,

答案 2 :(得分:0)

试试这个

sed s/[^,@]*@[^,]*/genericid@domain.com/g

echo 'pqr@domain2.com,def@domain.com,some@domain.com' | sed s/[^,@]*@[^,]*/genericid@domain.com/g

结果

genericid@domain.com,genericid@domain.com,genericid@domain.com

答案 3 :(得分:0)

仍然与UNIX有关,虽然需要更现代,更无处不在的工具Ammonite,但您可以使用email-replace

$ amm path/to/email-replace.sc <random integer seed> <file1 with emails> <file2 with emails> ...

免责声明:匹配器可能远非完美,因此请自担风险,并始终提供备份。 请注意,默认情况下,它会使用新的随机电子邮件地址替换电子邮件。要使用固定的电子邮件地址,只需使用常量字符串替换randEmail的调用。