尝试用美元符号和 () 替换文本模式,无法使其工作。请帮忙
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"
答案1
我怀疑你的 shell 正在扩展$res
。将正则表达式括在单引号中以防止这种情况发生。
xargs
没有and 的稍微更有效的变体perl
:
find /var/www/vhosts/prod/xxx/ -name "*.php" -exec sed -i 's/mysql_fetch_array($res,MYSQL_ASSOC)/mysql_fetch_assoc($res);/g' {} \+
答案2
您还需要在搜索正则表达式中转义 $、( 和 ) 符号,您已经正确地在替换字符串中转义了 $。
使用 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"