zoukankan      html  css  js  c++  java
  • 【转】linux批量更新文件内容+【原创】转义时的问题

    程序开发中,可能你会经常遇到批量替换文件内容的情况,如果你使用的是linux,那么恭喜你,你可以使用一下三种办法进行查找替换。

      方法一:
      find -name 'file.log' | xargs perl -pi -e 's|string1|string2|g'
      这里使用了perl语言,使用-e加上一段代码,从而批量地将当前目录及所有子目录下的file.log文件中的string1替换成了string2
      string支持正则表达式
     
      方法二:
      sed -i "s/string1/string2/g" 'grep string1 -rl /path'
      这里使用了sed命令,将/path目录及其子目录下的所有文件中的string1替换成了string2
      这个命令,可能对返回多个文件不太支持,不太推荐!
     
      方法三:
      grep -i "string1" -r /path | awk -F : '{print $1}' | sort | uniq | xargs sed -i 's/string1/string2/g'
      这里使用了shell命令,先查找出文件,再用awk分割(以:切分),再行替换! 
     
     
    注意:
      grep可以使用正则,也可以使用转义一些特殊字符,比如“等
      sed -i 's/"localhost"/"10.2.2.2"/g' /home/my.conf
    -------------------------------------以上是原帖,地址:http://www.51testing.com/html/93/316693-815340.html-------------------------------------------------------
     
    上司发现了一个sql注入的漏洞,让我批量更新所有同名文件的这个地方,where("id='".$rec."'")改成where(array("id"=>$rec))
    因为我也是刚入门linux,所以马上百度方法,首先使用了sed -i "s/string1/string2/g" 'grep string1 -rl /path'
     
    sed -i "s/where("id='".$rec."'")/where(array("id"=>$rec))/g" `grep  -rl /home`
     
    测试,执行,成功,心里乐呵呵的在正式服务器里执行了,当时快下班了,就关了屏幕撤退了。
    第二天早上打开屏幕一看,我擦,还没执行完,一想确实,那么多文件屏幕显示也费劲了,然后又百度,
    因为都是同名的文件,所以这次用了 find -name 'file.log' | xargs perl -pi -e 's|string1|string2|g'这个方法,
    中间因为转义费了好久的事,
     
    find /home/ -name 'xxxx.php' | xargs perl -pi -e "s|where("id='".$rec."'")|where(array("id"=>$rec))|g"  -> 错误
    一开始写的是 $rec 然后就是不成功,没办法只有百度转义,发现很多博文都有些为了转义使用5678个来转义他自己,恍然大悟,原来$转义出来的还是$rec还是个变量,
     
    find /home/ -name 'xxxx.php' | xargs perl -pi -e "s|where("id='".\$rec."'")|where(array("id"=>\$rec))|g" -> 正确
    因为从双引号里先转义了\$,从双引号里出来时就已经是$了,然后命令执行时再转义成了$rec,这下终于好了,测试成功,
    执行了半分钟,全部替换完毕,
  • 相关阅读:
    JVM
    关于filter
    session
    xml
    互联网应用和企业级项目的区别
    本学期javaee目标
    团队项目软件度量
    团队项目总结
    团队项目来换网最新
    ubuntu18.04 编译opencv4.4.0 带cuda加速,ffmpeg
  • 原文地址:https://www.cnblogs.com/yubestman/p/3981161.html
Copyright © 2011-2022 走看看