html tool

2013年4月28日星期日

linux 多文件中内容替换



  • linux 内容替换,多文件查找替换
    来源:http://bbs.phpchina.com/blog-191373-187668.html
    • + - 1.sed
      • 用sed命令可以批量替换多个文件中的 字符串。 
        sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
        例如:我要把mahuinan替换 为huinanma,执行命令: 
        sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www


        补充说明
        sed -i "s/oldString/newString/g"  `grep oldString -rl /path`    
        对多个文件的处理可能不支持,需要用 xargs, 搞定。
        变种如下:
        grep oldString -rl /path | xargs sed -i "s/oldString/newString/g" 
        注意: 
        在  `grep oldString -rl /path`    
        中 ` 为1前边的翻引号`,而不是enter 前的 '
        • xargs
          参见:http://blog.csdn.net/zhu244912654/article/details/7450430

          递归查找所有Python文件并统计文件行数
          find . -name '*.py' | xargs wc -l
          递归查找所有Emacs备份文件并删除:
          find . -name '*~' | xargs rm
          递归查找所有Python文件并搜索import语句:
          find . -name '*.py' | xargs grep 'import'
          [popexizhi] 这样看来xargs应该是对列表中内容的递归处理
          grep -rl
          [?]
          grep oldString -rl /path | xargs sed -i "s/oldString/newString/g" 
          替换时如果不存在,如果不存在系统提示“sed: no input files”如何处理这个问题?是否需要处理?
      2.shell
      • + - 在日程的开发过程中,可能大家会遇到将某个变量名修改 为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是 一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改: 
        grep "abc" * -R | awk -F:  '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g' 
        • grep "abc" * -R
          [popexizhi]递归查询当前目录和所有子目录中文件包含abc的内容
          查找结果如下:
          [root@bogon sedt]# grep "test" * -R
          2.sh:source /home/work/war_ftp/test/use_test.sh #import test use shell
          2.sh: ##test test code using
          2.sh:         ###echo "test test code using"
          2.sh: # test stop
          2.sh: #test del old
          2.sh: testdel=$?
          awk -F: '{print $1}'
          [popexizhi]对输入内容使用:分割,打印第一列内容
          如下:
          [root@bogon sedt]# grep "test" * -R|awk -F: '{print $1}'
          2.sh
          2.sh
          2.sh
          sort
          [popexizhi]排序
          uniq
          [popexizhi]去重复内容
          xargs sed -i 's/abc/abcde/g'
          [popexizhi]替换的内容
    + - 逐行读取文件

没有评论:

发表评论