Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ack & negative lookahead giving errors

I have a problem with using ack-grep with a negative look ahead.

I am running this command:

ack-grep "paypal_responded(?!_at)"

but I am getting the error:

bash: !_at: event not found

I have tried adding backslashes in various places, but I'm also new to using ack & linux, so please treat me as a newbie with any instructions.

Thanks in advance.

like image 538
TobyG Avatar asked Dec 05 '11 12:12

TobyG


2 Answers

Try ack-grep 'paypal_responded(?!_at)'

You need single-quote to avoid bash interpret ! as history expand command.

like image 70
number5 Avatar answered Nov 02 '22 15:11

number5


The shell is interpreting the ! in your input as a command substitution:

$ ack-grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ !ac
ack-grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ 

You need to tell the shell that ! has no special meaning; there are two ways to do that:

ack-grep "paypal_responded(?\!_at)"

ack-grep "paypal_responded\(?\!_at\)"

or

ack-grep 'paypal_responded(?!_at)'

Single-quoted strings have fewer transformations applied to them:

$ ack-grep "s\!" /etc/passwd
$ ack-grep 's!' /etc/passwd
$ 
like image 45
sarnold Avatar answered Nov 02 '22 13:11

sarnold