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,这下终于好了,测试成功,
    执行了半分钟,全部替换完毕,
  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/yubestman/p/3981161.html
Copyright © 2011-2022 走看看