在Ruby中怎么编辑文件中的每一行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (72)

我试图找到一种简单的方式来编辑文件中的每一行,同时我在理解如何使用这个File类时会遇到一些麻烦。

我想要编辑的文件有几百行,每行中用逗号分隔值。我只对每行中的第一个值感兴趣,并且想要在第一个值后删除所有值。我试图做到以下几点:

File.open('filename.txt', 'r+') do |file|
  file.each_line { |line| line = line.split(",")[0] }
  file.write
  file.close
end

不起作用,因为File.write方法要求将内容写为参数。

提问于
用户回答回答于

更好的解决方案之一(也是最安全的)是使用TempFile创建临时文件,并在完成后将其移至原始位置(使用FileUtils):

   require 'fileutils'
   require 'tempfile'

    t_file = Tempfile.new('filename_temp.txt')
    File.open("filename.txt", 'r') do |f|
      f.each_line{|line| t_file.puts line.split(",")[0].to_s }
    end
    t_file.close
    FileUtils.mv(t_file.path, "filename.txt")
用户回答回答于

修改文件位置的另一种方法是使用-i

ruby -F"," -i.bak -ane 'puts $F[0]' file

扫码关注云+社区