Thursday, March 4, 2010

ack is awesome!

Wow! People have been telling me this for years, but I was getting along OK with my old school Unix craziness:
$ find ./ | grep -v svn | xargs grep '\-\>Promotion'
But today I couldn't get that working. Something with xargs escaping of -> just refused to fly.

So I installed ack and ran it:
# cpan App::Ack
$ ack '\-\>Promotion'
And it found what I was looking for with zero fuss!
Control/SG.pm
335: $self->Promotion($promo_hash);

View/Web/Phoenix/lib/Phoenix/Controller/SG.pm
2844: $c->log->debug("you have these PromotionCode's already: " . (join ", ", keys %{$sg->Promotion}));
2846: unless ($sg->Promotion->{$preauth}) {
Holy buckets! That is AWESOME! Thanks Andy!

3 comments:

gregoa said...

$ echo $GREP_OPTIONS
--exclude-dir=.svn
$ mkdir foo
$ echo '->Promotion' > foo/bar
$ cat foo/bar
->Promotion
$ grep -r "\->Promotion" .
foo/bar:->Promotion

Unknown said...

grep -r is nice but you're still going to dig through a lot of files you dont need.
Ack has a really nice --perl option to filter for *.pl *.pm *.t, saving you some typing.

Brock said...

You could do:

ack -- '->Promotion'

and thus skip the backslashes.