正则表达式替换未按预期从 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
字符串
我正在尝试弄清楚为什么这个正则表达式不起作用。我要编辑的脚本中的行是:
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
字符串