From: "Jesús Gabriel y Galán" Date: 2011-07-20T15:40:05+09:00 Subject: Re: copy range of lines to another file based on regex match On Wed, Jul 20, 2011 at 7:18 AM, Neubyr Neubyr wrote: > Hi, > > I am writing a script to search for a particular string in a file and > then copy all lines starting from matching-line to another file. > Following should make it clear again: > * search for first occurrence of a particular string in a file > * find it's line number > * copy certain text in all lines or entire line, starting from above > line number to EOF to another file > > I can find the matching line's number as: > > File.foreach(afile) do |line| >  if line =~ /(\S+:)(\S+:)(\S+:)8055:(\S+:)(\S+)/ >    puts "Found match at #{$.}" >    lnumber = $. >  end > end > > > But I am not sure how to copy range of line numbers to another file. I > thought about using another File open again and then use range operators > ($. == lnumber) as mentioned here, > http://pleac.sourceforge.net/pleac_ruby/patternmatching.html , but > wondering if there is any other better way that I might be missing here. > Any suggestions? Forget about line numbers, you are already iterating over the lines, just iterate first until that line, then read the rest of the file and write it out: File.open(file) do |f| File.open(output, "w") do |out| line = f.gets until line =~ your_regex out.puts line out.write f.read end Jesus.