Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the easiest way to get an equivalent to GNU grep that supports negative lookbehinds?

I'm trying to grep through a bunch of files in nested subdirectories to look for regular expression matches; my regex requires negative lookbehind.

Perl has negative lookbehind, but as far as I can tell GNU grep doesn't support negative lookbehinds.

What's the easiest way to get an equivalent to GNU grep that supports negative lookbehinds?

(I guess I could write my own mini-grep in Perl, but that doesn't seem like it should be necessary. My copy of the Perl Cookbook includes source for tcgrep; is that what I should use? If so, where's the latest version? Don't tell me I have to type this entire program!)

like image 759
Dan Fabulich Avatar asked Mar 22 '10 04:03

Dan Fabulich


2 Answers

Use ack! Ack is written in Perl so it uses Perl's regex engine (by default).

The negative look-behind is ack "(?<!bad)boy" (per willert's comment)

like image 80
too much php Avatar answered Oct 02 '22 03:10

too much php


Thanks to a comment from other question. I've found that negative lookbehind is experimentally supported in grep with the -P/--perl-regexp option, so you may still not need to use a different tool if you prefer to keep using grep.

By the way, my preferred alternative to grep is grin (which is written in python).

like image 37
jcollado Avatar answered Oct 02 '22 02:10

jcollado