Okailon
2018-12-06 00:53
采纳率: 66.7%
浏览 2.0k

如何在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" 


请行家提示,如何在此加入这个“$”!


谢谢!

  • 收藏

2条回答 默认 最新

  • streamsunshine 2018-12-06 07:30
    已采纳

    你的“$link”应该是引用了link这个变量的值吧,你加一个括号($link)试一下,如果单纯就是 $link 可以使用斜杠符避免解析 $ 如 \$link

    打赏 评论
  • Okailon 2018-12-06 12:37

    $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

    打赏 评论

相关推荐 更多相似问题