我试图以递归方式将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
我做错了什么?
答案 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