Ack & negative lookahead дает ошибки

У меня проблема с использованием ack-grep с негативным прогнозом.

Я запускаю эту команду:

ack-grep "paypal_responded(?!_at)"

но я получаю сообщение об ошибке:

bash: !_at: event not found

Я попытался добавить обратную косую черту в разных местах, но я также новичок в использовании ack и linux, поэтому, пожалуйста, обращайтесь со мной как новичок с любыми инструкциями.

Спасибо заранее.

Ответ 1

Попробуйте ack-grep 'paypal_responded(?!_at)'

Вам нужна одинарная кавычка, чтобы избежать bash интерпретировать ! как команду расширения истории.

Ответ 2

Оболочка интерпретирует ! в вашем вводе как замену команды:

$ 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
$ 

Вам нужно сообщить оболочке, что ! не имеет особого значения; есть два способа сделать это:

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

Забастовкa >

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

или

ack-grep 'paypal_responded(?!_at)'

Строки с одним кавычком имеют меньше применений к ним:

$ ack-grep "s\!" /etc/passwd
$ ack-grep 's!' /etc/passwd
$