搜索模式并在ruby之间打印所有内容

时间:2016-08-29 21:55:08

标签: ruby scripting pattern-matching

我有一个文件,我想查看该文件,并且只要它与“LINE_MATCH_START”相匹配,这是该行中唯一的文本(注释或前面的空格除外),我希望它能够打印出来后直到它匹配“LINE_MATCH_END”(它也必须是该行中唯一的文本,允许注释但这必须是除了空格之外的行中的第一件事)。我希望它能够覆盖整个文件并将其保存多次。

实施例,

printf ("this is some text")

// comment LINE_MATCH_START this should be ignored

some_other_code

  LINE_MATCH_START // can have spaces before it and comments after it
oh
this 
should be 
saved
    LINE_MATCH_END
some_other_piece_of_code
LINE_MATCH_START
AGAIN
lets save this part as well
LINE_MATCH_END

从上面的代码片段中,“LINE_MATCH_START”之前可以有空格,它可以在同一行上有注释,但没有其他代码。

我希望我的代码保存所有这部分

oh
this 
should be 
saved
AGAIN
lets save this part as well

我如何在ruby中执行此操作?

1 个答案:

答案 0 :(得分:0)

这看起来像是得到了你的输出,也许有助于一个想法,但我会做一些更强大的东西。

f = File.new('output.txt', 'w')
visible = false
IO.foreach('file_name') do |line|
  case line
  when /\s*LINE_MATCH_START.*/ then visible = true
    next
  when /\s*LINE_MATCH_END.*/ then visible = false
  end
  f.write(line) if visible
end