忽略perl的find-and-replace命令中的特殊字符



我使用此命令执行查找和替换

system( "perl -pi -e 's/$arr3[$i]/$arr2[$i]/g' /opt/app/d1ebl1m5/dv02/cingbt02/J2EEServer/config/AMSS/application/properties/CSCEnvVar.properties_try");

$arr3[$i]的值包含特殊字符,如-e$等。我该怎么做才能忽略所有特殊字符,只将表达式视为正常字符串

您通常需要

my $search_pat = quotemeta($search);    
s/Q$search_patE/$replace/g

或等效

s/Q$searchE/$replace/

生成代码通常是个坏主意,所以解决方案变成了

system(
   perl => (
      '-i', '-p',
      '-e' => '
         BEGIN { $s = shift(@ARGV); $e = shift(@ARGV); }
         s/Q$s/$e/g
      ',
      '--',
      $arr3[$i],
      $arr2[$i],
      '/opt/app/.../CSCEnvVar.properties_try',
   )
);

最新更新