ruby 文件内容查找和替换

刚刚接触ruby不就,总想拿过来写点什么,正好公司里有个项目需要把原来的branch目录里面pom文件的一部分内容更新出去,于是试着用ruby写了一下这段脚本(只贴出了核心的那部分)

 

Dir.foreach(url){|e|
            if e=="."||e==".."||e=="target" then next end
            _f=url+"\\"+e
            if e=="pom.xml" then @poms<<_f end
            if File.directory? _f then  _loadPom _f end
}

foreach 这个命令用的比较舒服,不像java 那样需要遍历目录结构 ,在ruby里面一条命令就可以了。Dir会把. 和.. 也作为一个目录结构,这里需要把它删除,同时由于项目里面用到了maven来构建,所以target也是不需要扫描的,定义了一个@pom来存放所有的pom 文件。如果是子目录的话就用递归。

 

@poms.each{|pom|
            #search and replace
            file=File.read(pom)
            if file.scan(/(#{@oldV})/).length<=0 then next end
            buffer=file.gsub(/#{@oldV}/,@newV)
            if not File.writable? pom then
                #check out the file first
                File.open(pom).chmod(0755)
            end
            f=File.write(pom,buffer)
            a+=1
        }

遍历刚才发现的pom文件,file.scan 会先判断文件内容是否有需要替换的内容,如果没有则继续执行下一个文件,否则 file.gsub 执行搜索和替换。gsub是String 类的一个很有用的方法。替换好以后,在打开同一个文件,把修改好的内容替换在里面。这里File.read 和 File.write 用的很舒服。

这里比较有意思的是file.gsub(/(#{@oldV})/,@newV) ,里面@oldV和@newV是自定义的内部变量,用来保存查找和替换的内容。而#{@oldV} 是ruby的语法用来实现表达式替换的作用,例如

person="jack"

p "hello #{person}"

 

 

 

posted @ 2013-09-28 16:01  JC是坏蛋  阅读(1922)  评论(0编辑  收藏  举报