开发者社区> 问答> 正文

用文件中的混合特殊字符替换文本

我正在尝试将字符串VCC_TGL替换为$ G_CORNER_SQL_DETAILS($ corner + vcc_tgl) ,但我尝试使用perl一种衬垫,但缺少$字符。

my $i="VCC_TGL";
my $test="\$G_CORNER_SQL_DETAILS(\$corner+vcc_tgl)";
print "replace $i with $test\n";
`perl -pi.back -e 's/$i/$test/' configure.tcl`;

我执行上面的perl脚本的输出是,

set vccio G_CORNER_SQL_DETAILS(corner+vcc_tgl)

展开
收起
祖安文状元 2020-01-05 18:54:52 454 0
1 条回答
写回答
取消 提交回答
  • 您正在$通过外壳解析传递包含特殊外壳字符的字符串,例如,即它们由外壳处理,因此会丢失:

    $ perl -e '$test="XXX\$YYY"; qx/set -x; echo $test/' 
    + echo XXX
    
    

    反跳,qx//并且system("...")容易出现此类问题,并且通常不安全。

    您应该改用的安全数组版本system(),即完全绕过外壳程序,以便按原样将参数传递到调用的命令中:

    $ perl -e '$i="AAA"; $test="XXX\$YYY"; system(qw(echo perl -pi.back -e), "s/$i/$test/", qw(configure.tcl));'
    perl -pi.back -e s/AAA/XXX$YYY/ configure.tcl
    
    2020-01-05 18:55:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载