试图用美元符号和()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式来防止这种情况。
没有xargs和perl效率略高一点:
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"