perl批量文本replace字面美元符号

试图用美元符号和()sreplace文本模式,不能让它工作。 请帮忙

find /var/www/vhosts/prod/xxx/ -name "*.php"|xargs perl -w -i -p -e "s/mysql_fetch_array\($res,MYSQL_ASSOC\)/mysql_fetch_assoc(\$res);/g" 

我怀疑你的shell正在扩展$res 。 用单引号括起正则expression式来防止这种情况。

没有xargsperl效率略高一点:

 find /var/www/vhosts/prod/xxx/ -name "*.php" -exec sed -i 's/mysql_fetch_array($res,MYSQL_ASSOC)/mysql_fetch_assoc($res);/g' {} \+ 

您还需要转义search正则expression式中的$,(和)符号,您已经正确地转义了replacestring中的$。

在Perl 5.10.1中,我必须使用-i.bak参数来使其工作,否则就地编辑开关会抱怨我没有备份。

 find /var/www/vhosts/prod/xxx/ -name "*.php"|xargs perl -w -p -i.bak -e "s/mysql_fetch_array\(\$res,MYSQL_ASSOC\)/mysql_fetch_assoc(\$res);/g"