From: Phrogz Date: 2008-08-08T22:53:05+09:00 Subject: Re: Regex. How to return multiple lines On Aug 8, 6:49 am, Damjan Rems wrote: > I would baisicly like to have somekind of fulltext search. In case it helps, here is my own ruby script for searching for files with names and/or contents matching a particular regex: Slim2:~ phrogz$ cat /usr/local/bin/findfile #!/usr/bin/env ruby USAGE = < max_depth begin if File.directory?( path ) yield( path, depth ) if include_directories files = Dir.entries( path ).select{ |f| true unless f=~/^\. {1,2}$/ } unless files.empty? files.collect!{ |file_path| Dir.crawl( path+'/'+file_path, max_depth, include_directories, depth+1, &blk ) }.flatten! end return files else yield( path, depth ) end rescue SystemCallError => the_error warn "ERROR: #{the_error}" end end end start_time = Time.new name_match = Regexp.new(ARGS[:name_regexp], true ) content_match = ARGS[:content_regexp] && Regexp.new( ". {0,20}#{ARGS[:content_regexp]}.{0,20}", !ARGS[:usecase] ) file_count = 0 matching_count = 0 Dir.crawl( '.', ARGS[:max_depth], ARGS[:includedirs] && !content_match ){ |file_path, depth| if File.split( file_path )[ 1 ] =~ name_match if content_match if ARGS[:showall] shown_file = false IO.readlines( file_path ).each_with_index{ | line_text,line_number| if match = line_text[content_match] unless shown_file puts file_path matching_count += 1 shown_file = true end puts ( "%5d: " % (line_number+1) ) + match end } puts " " if shown_file elsif IO.read( file_path ) =~ content_match puts file_path," #{$~}"," " matching_count += 1 end else puts file_path matching_count += 1 end end file_count += 1 } elapsed = Time.new - start_time puts "Found %d file%s (out of %d) in %.2f seconds" % [ matching_count, matching_count==1 ? '' : 's', file_count, elapsed ]