用Ruby删除行

时间:2012-03-19 13:11:37

标签: ruby parsing

如何使用ruby打开文本文件,并删除包含“关键短语”的行。

我不想只删除关键短语,我需要包含要删除的短语的完整行。

3 个答案:

答案 0 :(得分:5)

这样的事情:

File.open(output_file, "w") do |ofile|
  File.foreach(input_file) do |iline|
    ofile.puts(iline) unless iline =~ Key_phrase
  end
end

答案 1 :(得分:1)

这是一次性的独立任务吗?编辑文件到位? 如果是这样,以下单行可能很方便:

ruby -i.bak -ne 'print unless /key phrase/' file-to-hack.txt

这会更改文件,并备份原始文件。 如果您希望将此作为更大程序的一部分,请为每行添加循环..

答案 2 :(得分:0)

另一种方法是在ruby中使用inplace编辑(而不是从命令行):

#!/usr/bin/ruby

def inplace_edit(file, bak, &block)
    old_argv = Array.new(ARGV)
    old_stdout = $stdout
    ARGV.replace [file]
    ARGF.inplace_mode = bak
    ARGF.lines do |line|
        yield line
    end
    ARGV.replace old_argv
    $stdout = old_stdout
end

inplace_edit 'test.txt', '.bak' do |line|
    print line unless line.match(/something/)
    print line.gsub(/search1/,"replace1")
end

如果您不想创建备份,请将“.bak”更改为“”。