Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Perl替换全局电子邮件地址_Perl_Email_String Interpolation - Fatal编程技术网

用Perl替换全局电子邮件地址

用Perl替换全局电子邮件地址,perl,email,string-interpolation,Perl,Email,String Interpolation,我尝试使用Perl全局替换shell脚本中的电子邮件地址,但如果存在@character,Perl似乎无法替换 我的shell脚本的一部分: MAIL_LIST_2="user01@abc.com" perl命令: perl -pi -e "s/user01@abc.com/user01@devemail.abc.com/g" test.sh 有什么想法吗?在Perl代码中的电子邮件地址中转义@符号: echo 'MAIL_LIST_2="u

我尝试使用Perl全局替换shell脚本中的电子邮件地址,但如果存在@character,Perl似乎无法替换

我的shell脚本的一部分:

MAIL_LIST_2="user01@abc.com"
perl命令:

perl -pi -e "s/user01@abc.com/user01@devemail.abc.com/g" test.sh
有什么想法吗?

在Perl代码中的电子邮件地址中转义@符号:

echo 'MAIL_LIST_2="user01@abc.com"' |
perl -p -e "s/user01\@abc.com/user01\@devemail.abc.com/g"
它给出了输出:

邮件列表2=user01@devemail.abc.com 问题在于,Perl将unscaped@视为数组的符号,并试图将不存在的数组的内容插入正则表达式中,但这并不能像您所希望的那样工作

请注意,如果在命令行上启用了警告--w,或使用strict;使用警告;在脚本文件中—然后您会被告知为什么事情不那么顺利:

echo 'MAIL_LIST_2="user01@abc.com"' |
perl -pwe "s/user01@abc.com/user01@devemail.abc.com/g"
Possible unintended interpolation of @abc in string at -e line 1.
Possible unintended interpolation of @devemail in string at -e line 1.
Name "main::abc" used only once: possible typo at -e line 1.
Name "main::devemail" used only once: possible typo at -e line 1.
MAIL_LIST_2="user01@abc.com"
寓意:始终在Perl脚本中启用警告-这可以避免不必要的痛苦。

在Perl代码中的电子邮件地址中转义@符号:

echo 'MAIL_LIST_2="user01@abc.com"' |
perl -p -e "s/user01\@abc.com/user01\@devemail.abc.com/g"
它给出了输出:

邮件列表2=user01@devemail.abc.com 问题在于,Perl将unscaped@视为数组的符号,并试图将不存在的数组的内容插入正则表达式中,但这并不能像您所希望的那样工作

请注意,如果在命令行上启用了警告--w,或使用strict;使用警告;在脚本文件中—然后您会被告知为什么事情不那么顺利:

echo 'MAIL_LIST_2="user01@abc.com"' |
perl -pwe "s/user01@abc.com/user01@devemail.abc.com/g"
Possible unintended interpolation of @abc in string at -e line 1.
Possible unintended interpolation of @devemail in string at -e line 1.
Name "main::abc" used only once: possible typo at -e line 1.
Name "main::devemail" used only once: possible typo at -e line 1.
MAIL_LIST_2="user01@abc.com"

寓意:总是在Perl脚本中启用警告-这可以避免不必要的痛苦。

还有,而不是,但Perl似乎无法。。。为什么不解释一下这意味着什么呢?并显示任何警告和错误。一行程序中的警告可以通过-w swithc启用,因此您可以使用perl-i-wpe“…”。我喜欢分隔-i选项。当脚本不工作时,我建议根本不要使用-i选项。它会损坏文件。你很幸运,这里的变化实际上是无效的。当您合理地确定脚本做了您想要的事情时,您可以添加-i选项以进行适当的更改。在那之前,不要把它包括在内。这也适用于其他“就地覆盖”程序,如sed。您还可以使用perl-e'…'文件| diff-u文件-查看脚本的更改-只要您不覆盖该文件。。。为什么不解释一下这意味着什么呢?并显示任何警告和错误。一行程序中的警告可以通过-w swithc启用,因此您可以使用perl-i-wpe“…”。我喜欢分隔-i选项。当脚本不工作时,我建议根本不要使用-i选项。它会损坏文件。你很幸运,这里的变化实际上是无效的。当您合理地确定脚本做了您想要的事情时,您可以添加-i选项以进行适当的更改。在那之前,不要把它包括在内。这也适用于其他“就地覆盖”程序,如sed。您还可以使用perl-e'…'文件| diff-u文件来查看脚本的更改,只要您不覆盖该文件,它就可以工作。谢谢Jonathan=]您可以在正则表达式替换中包含引号,以避免任何可能的部分匹配。这很有效。谢谢Jonathan=]您可以在正则表达式替换中包含引号,以避免任何可能的部分匹配。