我有一些脚本在不同的域中有很多电子邮件地址(比如domain1.com
,domain2.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
答案 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
的调用。