目录中的行替换清除整个文件?

时间:2014-04-08 07:53:30

标签: ruby replace

我试图以递归方式将index.html个文件中的整行替换为包含子目录的目录。

上面的代码使用var"模式"来搜索正确的行,但是当我运行它时,它会从index.html文件中删除所有内容。

pattern = "Keyword"

replacement = "<td width=\"30\"><img src=\"styles/img/trans.gif\" width=\"30\"></td>"

Dir.glob('/Users/root/Desktop/directory/test/**/index.html') do |item|
    next unless File.file?(item)
        File.open(item, "w+:ASCII-8BIT") do |f|
            f.each_line do |line|
                if line.match(pattern)
                    my_line = line
                    line.sub(my_line, replacement)
                end     
        end 
    end 
end

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您使用File.open开放模式w+,根据Ruby文档,它是:

  

“w +”读写,将现有文件截断为零长度或创建一个新文件进行读写。

要阅读文件并使用r放置一些行:

File.open(item, "r:ASCII-8BIT")

答案 1 :(得分:0)

您需要首先读取文件,构建预期的输出,然后它:

Dir.glob('/Users/root/Desktop/directory/test/**/index.html') do |item|
  next unless File.file?(item)
    output = IO.readlines(item).map do |line|
      if line.match(pattern)
        replacement
      else
        line
      end
    end 
    File.open(item, "w+:ASCII-8BIT") do |f|
      f.write output.join
    end
  end 
end