#!/usr/bin/env ruby # # section-parse-insane.rb: scan standard input and do the following: # # 1. look for a section that begins with "test-text "STUFF/foo" and ends # with a blank line. # 2. print the "bar.DIGITS" suffix for each line in the section # # Example: # > cat input.txt # test-text "blah blah blah garbage/foo" # random crap bar.1 # random crap bar.2 # random crap bar.3 # random crap bar.4 # # test-text "blah blah blah garbage/apple" # random crap bar.1 # random crap bar.2 # random crap bar.3 # random crap bar.4 # > ./section-parse-insane.rb < input.txt # bar.1 # bar.2 # bar.3 # bar.4 # # section and row matches S = %r{^test-text "[^"]+/foo"\n((?:^[^\n]*bar\.\d+\n)+)^\s*\n}m B = /^.*(bar\.\d+)$/ # extract section body, split by line, map to suffix, and print result puts(ARGF.read.scan(S)[0][0].split(/\n/).map { |s| s.gsub(B, '\1') })