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

时间:2014-10-07 12:03:06

标签: regex perl 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$等特殊字符。我该如何忽略所有特殊字符,只需将表达式视为普通字符串

1 个答案:

答案 0 :(得分:2)

您通常需要

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

或等效的

s/\Q$search\E/$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',
   )
);