perl - 使用 Perl 全局替换电子邮件地址
问题描述
我尝试使用 Perl 来全局替换我的 shell 脚本中的电子邮件地址,但如果有 @ 字符,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"
这给出了输出:
MAIL_LIST_2="user01@devemail.abc.com"
问题是 Perl 将未转义@
的数组视为数组的标志,并尝试将(不存在的)数组的内容插入到正则表达式中,这无法按您的意愿工作。
请注意,如果您在命令行或脚本文件中启用了警告 - <code>-w use strict; use warnings;
- 那么您会被告知为什么事情没有那么好:
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 脚本中启用警告——它避免了不必要的痛苦。
推荐阅读
- javascript - 上传 webm 网络摄像头记录时获取失败。请求已取消
- java - 为什么使用log4j2时rollingfile没有输出
- laravel - Laravel 查询,其中列值大于相关模型列值的总和
- jenkins - 我们可以在 CI/CD 管道中执行哪些测试?
- android - Xamarin:安装的模拟器不在“开始”按钮列表中
- android-jetpack-compose - LazyColumn 和可变列表 - 如何更新?
- excel - 取消选中复选框时如何减去
- android - 从 DatePicker Andorid 禁用周六和周日
- django - 从django的外键表中选择所有外键
- github - 使用 GitHubworkflow 在 GitHub 操作中导入文件