Search-0.0.1

NAME
search

SYNOPSIS
search Directory re re* [options]+

URIS
http://codeforpeople.com/lib/ruby/
http://rubyforge.org/projects/codeforpeople/

INSTALL
gem install search

DESCRIPTION
search is a combination of find and grep. it recursively traverses a
directory and searches all files for one or more regular expressions,
printing each file containing matches on stdout. by default it
ignores
repo directories like .cvs|.svn|.rcs

PARAMETERS
Directory (1 -> Directory)
re (-2 -> re)
–Filter=Filter, -F (0 ~> list_of_string(Filter=.*))
limit searchs to files matching these regular expressions. may be
given more than once
–All=All, -A (0 ~> All)
all Filters must match to be considered a success. default
is that
any Filter pattern matching is considered a success
–Ignore=Ignore, -I (0 ~> list_of_string(Ignore=.svn,.cvs,.rcs))
ignore any file matching this list of patterns default
(.svn|.cvs|.rcs)
–Sensitive, -S
conisder all Filters case sensitive. default is case insensitive
–file=file, -f (0 ~> file)
load a file full of patterns, one per line
–sensitive, -s
conisder all patterns case sensitive. default case insensitive
–any, -a
any pattern match is considered success. default is that all
patterns must match
–verbose, -v
print every match with lineno information
–help, -h

enjoy.

a @ http://codeforpeople.com/

On Dec 6, 5:45 pm, “ara.t.howard” [email protected] wrote:

INSTALL
Directory (1 -> Directory)
(.svn|.cvs|.rcs)
print every match with lineno information
–help, -h

enjoy.

a @http://codeforpeople.com/

we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama

Nice. Playing with it now.

Ps. Your gemspec needs a dependency on main.

Regards,
Jordan

On Dec 6, 2007, at 7:05 PM, MonkeeSage wrote:

Ps. Your gemspec needs a dependency on main.

ooooops. thanks!

a @ http://codeforpeople.com/

On Dec 6, 2007 6:45 PM, ara.t.howard [email protected] wrote:

PARAMETERS
ignore any file matching this list of patterns default
–verbose, -v
print every match with lineno information
–help, -h

enjoy.

a @ http://codeforpeople.com/

Inspired by ack?

http://petdance.com/ack/

On Dec 6, 9:20 pm, “ara.t.howard” [email protected] wrote:

h.h. the 14th dalai lama
NP. I really like this package, BTW. :slight_smile:

A problem I just ran into is dot-files (e.g., .tesfile). It looks like
the glob pattern (constructued on line 115) is the problem. In a
directory with .testfile, I get this output:

$ ruby -w ‘p Dir[".//"]’
[]

$ ruby -e ‘p Dir["./.*"]’
["…", “.testfile”, “.”]

But adding a dot to the double star doesn’t work correctly (i.e.,
“././” get treated as “./…/*”, doh). I’m not sure there’s any
easy way to do it with Dir#glob.

Regards,
Jordan

On Dec 6, 2007, at 8:48 PM, Rob S. wrote:

Inspired by ack?

http://petdance.com/ack/

yeah i blogged that a while back

http://drawohara.com/post/19092746

bil kleb forwarded it my way. curiously, it’d just written search a
few days before. of course ack is more fully featured - but i
figured i’d better release since ack is in perl and ruby outght to be
represent’n :wink:

a @ http://codeforpeople.com/

On Dec 6, 10:54 pm, MonkeeSage [email protected] wrote:

we can deny everything, except that we have the possibility of being
[]

$ ruby -e ‘p Dir["./.*"]’
["…", “.testfile”, “.”]

But adding a dot to the double star doesn’t work correctly (i.e.,
“././” get treated as “./…/*”, doh). I’m not sure there’s any
easy way to do it with Dir#glob.

Regards,
Jordan

Not sure what the difference in performance is with Find#fidn vs.
Dir#glob, but as a drop-in replacement…

— search.old 2007-12-06 23:09:34.000000000 -0600
+++ search 2007-12-06 23:10:13.000000000 -0600
@@ -1,6 +1,7 @@
#! /usr/bin/env ruby

require ‘main’
+require ‘find’

Main {
description <<-txt
@@ -112,9 +113,8 @@
end

def each_entry_with_lines

  • glob = File.join param[‘Directory’].value, ‘’, '
    filters = build_filter_list
  • Dir.glob(glob) do |entry|
  • Find.find param[‘Directory’].value do |entry|
    next unless filters.match(entry)
    test ?f, entry or next
    lines = IO.readlines entry rescue next

Might I also suggest that you filter on the file’s basename? One might
except…

search -F “^.” -a . “blah”

…to match all dot-files in ./ which contain “blah”, but you actually
need something like this since you’re running the filter against the
absolute path…

search -F “./.” -a . “blah”

Regards,
Jordan

On 12/6/07, ara.t.howard [email protected] wrote:

http://drawohara.com/post/19092746

bil kleb forwarded it my way. curiously, it’d just written search a
few days before. of course ack is more fully featured - but i
figured i’d better release since ack is in perl and ruby outght to be
represent’n :wink:

Hmmm, something must be in the air. Shortly after reading this, my
RSS reader delivered a post from Peter C. pointing to this:
http://rak.rubyforge.org/


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

On Dec 6, 11:12 pm, MonkeeSage [email protected] wrote:

ooooops. thanks!
the glob pattern (constructued on line 115) is the problem. In a
easy way to do it with Dir#glob.
#! /usr/bin/env ruby

  • glob = File.join param[‘Directory’].value, ‘’, '
    search -F “^.” -a . “blah”

…to match all dot-files in ./ which contain “blah”, but you actually
need something like this since you’re running the filter against the
absolute path…

search -F “./.” -a . “blah”

Regards,
Jordan

Testing on a few different directories and filter patterns, the
Find#find version (w/ filters.match(File.basename(entry))) appears to
be about the same a the Dir#glob version for speed (about two tenths
of a second slower for a directory with 2109 files and a filter
pattern of “.*”).

Regards,
Jordan

On Dec 6, 2007, at 10:49 PM, MonkeeSage wrote:

Might I also suggest that you filter on the file’s basename? One
search -F “./.” -a . “blah”
Regards,
Jordan

i’ll incorporate something like you suggest and re-release. thanks
for the feedback!

a @ http://codeforpeople.com/

On Dec 7, 2007, at 7:36 AM, Rick DeNatale wrote:

Hmmm, something must be in the air. Shortly after reading this, my
RSS reader delivered a post from Peter C. pointing to this:
http://rak.rubyforge.org/

funny. for me it has been rails that’s caused the change: too dang
many files scattered all over the place :wink:

a @ http://codeforpeople.com/

“Rick DeNatale” [email protected] writes:

yeah i blogged that a while back
http://rak.rubyforge.org/
Also http://www.incava.org/projects/glark/, which is Ruby.

And of course also GNU grep, e.g.
grep -r --include=*.c PATTERN DIR

Steve

On Dec 6, 2007, at 10:14 PM, MonkeeSage wrote:

Might I also suggest that you filter on the file’s basename? One might
except…

search -F “^.” -a . “blah”

…to match all dot-files in ./ which contain “blah”, but you actually
need something like this since you’re running the filter against the
absolute path…

search -F “./.” -a . “blah”

that’s kind of interesting - why not simply

search . blah -F /.

though?

this should work unless you happen to have dot-directories too. if so
you can use

search . blah -F ‘.[^/]+$’

which would filter only dot-files though. i like the filter being
able to filter certain directories too. i could add an option to
alter it’s behavior to only match basenames, or add a new option.

thoughts?

a @ http://codeforpeople.com/

On Dec 9, 1:23 pm, “ara.t.howard” [email protected] wrote:

search -F “./.” -a . “blah”

that’s kind of interesting - why not simply

search . blah -F /.

though?

Cause I’m not smart, hehe. That works fine.

this should work unless you happen to have dot-directories too. if so
you can use

search . blah -F ‘.[^/]+$’

which would filter only dot-files though. i like the filter being
able to filter certain directories too. i could add an option to
alter it’s behavior to only match basenames, or add a new option.

thoughts?

I don’t think you need change anything since there will always be at
least one “/” (and it’s just as easy to affix the pattern with / as
type an extra switch). My brain sometimes malfunctions. :slight_smile:

a @http://codeforpeople.com/

it is not enough to be compassionate. you must act.
h.h. the 14th dalai lama

Regards,
Jordan

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs