2011-12-05 18 views
10

Mam problem z używaniem ack-grep z negatywnym spojrzeniem.Potwierdzenia błędu dodatniego i ujemnego z wyprzedzeniem

Używam tego polecenia:

ack-grep "paypal_responded(?!_at)" 

ale otrzymuję błąd:

bash: !_at: event not found 

Próbowałem dodanie backslashy w różnych miejscach, ale jestem również w używaniu ACK & linux, więc proszę traktuj mnie jak początkującego z wszelkimi instrukcjami.

Z góry dziękuję.

Odpowiedz

16

Spróbuj ack-grep 'paypal_responded(?!_at)'

Trzeba apostrofu uniknąć bash interpretować ! jak historia polecenie rozwinąć.

+2

Świetne rzeczy. To posortowało to. Dzięki: o) – TobyG

+0

@ TobyG Czy mógłbyś zaakceptować to jako odpowiedź, aby to pytanie nie pozostało bez odpowiedzi? Dzięki! – user1251007

+0

Przepraszamy. To się zaczęło od moich wczesnych dni, kiedy nie zdawałem sobie sprawy, że nie przyjąłem odpowiedzi. Zrobione teraz. – TobyG

4

Powłoka jest interpretowania ! w wejściu jako podstawienia polecenia:

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

Trzeba powiedzieć skorupę że ! nie ma specjalnego znaczenia; istnieją dwa sposoby, aby to zrobić:

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

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

lub

ack-grep 'paypal_responded(?!_at)' 

panna cytowany struny mają mniej przekształceń stosowanych do nich:

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

Próbowałem ... ack-grep "paypal_responded (? \! _ At)" .. ale dostałem błąd ... " ack-grep: Nieprawidłowe wyrażenie "paypal_responded (? \! _ at)": Sekwencja (? \ ...) nie została rozpoznana w wyrażeniu regularnym, oznaczona <- TUTAJ w m/paypal_responded (? \ <- HERE! _at)/" – TobyG

+0

Sheesh, oczywiście dzieje się więcej, niż się spodziewałem - moje proste przykłady działały dokładnie tak, jak chciałem, ale dłuższy z' (?! _ At) 'zawodzi w okropny sposób i łatwo zrozumieć, dlaczego prowadziłeś sam orzechy próbują sprawić, żeby to działało. 'ack-grep" paypal_responded \ (? \! _ at \) "' działa dobrze ... ale nie mogę tego wyjaśnić. – sarnold

Powiązane problemy