虽然用Linux不是很多,但最近也在做了一点,感觉Linux非常强大,但也遇到了一些问题,想在此求解。
批量替换使用perl方法,成功执行:
find /data/www/default/ -iname "*.php" |xargs perl -pi -e "s|set names 'gbk'|set names 'utf-8'|g"
具体的操作为:将/data/www/default/下的所有php文件中的set names 'gbk'替换为set names 'utf-8'|,这句命令可以执行。
但是下面这句就无法执行,测试了一下是因为这个**“$”**,没有“$”的命令是可以执行的,用sed命令的情况也一样。
find /data/www/default/ -iname "*.php" |xargs perl -pi -e "s|mysqli_query(|mysqli_query($link,|g"
请行家提示,如何在此加入这个“$”!
谢谢!
你的“$link”应该是引用了link这个变量的值吧,你加一个括号($link)试一下,如果单纯就是 $link 可以使用斜杠符避免解析 $ 如 \$link
$link是text,用了这个\$link,下面这句可以执行
find /data/www/default -iname '*.php' -exec grep -H 'mysqli_query(\$query)' \{\} \;
但是后面的替换还是不行。
find /data/www/default -iname '*.php' |xargs perl -pi -e 's|mysqli_query(|mysqli_query(\$link,|g'
Unmatched ( in regex; marked by <-- HERE in m/mysqli_query( <-- HERE / at -e line 1.
xargs: perl: exited with status 255; aborting
用sed成功进行了替换!
find /data/www/default -iname "*.php" |xargs sed -i "s#mysqli_query(#mysqli_query(\$link, #g"
详情看下面链接
https://blog.csdn.net/weinsheimer/article/details/84888645