Ruby:如何替换文件中的文本?

thi*_*zy4 5 ruby regex replace

以下代码是xml文件中的一行:

<appId>455360226</appId>
Run Code Online (Sandbox Code Playgroud)

如何使用ruby将2个标签之间的数字替换为另一个数字?

knu*_*nut 15

没有可能在一个步骤中修改文件内容(至少我知道,当文件大小改变时).您必须读取文件并将修改后的文本存储在另一个文件中.

replace="100"
infile = "xmlfile_in"
outfile = "xmlfile_out"
File.open(outfile, 'w') do |out|
  out << File.open(infile).read.gsub(/<appId>\d+<\/appId>/, "<appId>#{replace}</appId>")
end  
Run Code Online (Sandbox Code Playgroud)

或者您将文件内容读取到内存中,然后用修改后的内容覆盖文件:

replace="100"
filename = "xmlfile_in"
outdata = File.read(filename).gsub(/<appId>\d+<\/appId>/, "<appId>#{replace}</appId>")

File.open(filename, 'w') do |out|
  out << outdata
end  
Run Code Online (Sandbox Code Playgroud)

(希望它有效,代码未经过测试)


Ste*_*ner 6

你可以在一行中这样做:

IO.write(filepath, File.open(filepath) {|f| f.read.gsub(//<appId>\d+<\/appId>/, "<appId>42</appId>"/)})
Run Code Online (Sandbox Code Playgroud)

IO.write默认情况下截断给定文件,因此如果您首先读取文本,执行正则表达式String.gsub并使用File.open块模式返回结果字符串,它将一举替换文件的内容.

我喜欢它读取的方式,但它当然也可以用多行写成:

IO.write(filepath, File.open(filepath) do |f|
    f.read.gsub(//<appId>\d+<\/appId>/, "<appId>42</appId>"/)
  end
)
Run Code Online (Sandbox Code Playgroud)