如何在Linux中处理替换字符中的特殊字符$?

虽然用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