正则表达式替换未按预期从 CLI 工作

Regex replace not working as expected from CLI

我正在尝试弄清楚为什么这个正则表达式不起作用。我要编辑的脚本中的行是:

Links::send_email('link_added.eml', $results, { admin_email => 1 }) or die "Unable to send mail: $GT::Mail::error";

并将其替换为:

Links::send_email('link_added.eml', { %$results, %$user }, { admin_email => 1 }) or die "Unable to send mail: $GT::Mail::error";

我正在尝试使用:

perl -p -e "s|'link_added.eml', $results|'link_added.eml', { %$link, %$results }|g" /home/zaprwire add.cgi

但它总是出现:

Links::send_email('link_added.eml', { %, % }$results, { admin_email => 1 }) or die "Unable to send mail: $GT::Mail::error";

注意 $result 没有被替换,{ } 位也只有 % 而不是我需要的变量名。我试过用 $ 等转义,但似乎没有任何效果。我错过了什么?

您在双引号中使用了 $link$results,因此会发生变量扩展。

我建议在这里使用 sed,因为这里的搜索和替换是相当基础的:

sed -E 's|(link_added\.eml, )$results|{ %$link, %$results }|g' /home/zaprwire add.cgi

注意 sed 命令两边的单引号。此外,link_added.eml 周围似乎没有 ',因此需要将其删除。

我在模式中添加了一个捕获组来缩短替换模式。

如果您打算匹配文字点,请记得转义 .

更多详情

  • (link_added\.eml, ) - link_added.eml, 和一个 space 捕获到第 1 组(</code> 指的是替换模式中的这个值)</li> <li><code>$results - 文字 $results 字符串