2011-12-05 7 views
10

Ho un problema con l'utilizzo di ack-grep con uno sguardo negativo avanti.Ack e lookahead negativo con errori

Sto facendo funzionare questo comando:

ack-grep "paypal_responded(?!_at)" 

ma sto ottenendo l'errore:

bash: !_at: event not found 

Ho provato ad aggiungere backslash in vari luoghi, ma sono anche di nuovo da utilizzare ack & linux, quindi per favore trattami come novizio con qualsiasi istruzione.

Grazie in anticipo.

risposta

16

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

È necessario un solo preventivo per evitare bash interpretare ! come la storia dei comandi espandersi.

+2

Grandi cose. Questo è risolto. Grazie: o) – TobyG

+0

@TobyG Ti dispiacerebbe accettare questo come una risposta in modo che questa domanda non rimanga più senza risposta? Grazie! – user1251007

+0

Siamo spiacenti. Questo risale ai miei primi giorni qui non si rendeva conto che non avrei accettato una risposta. Fatto ora. – TobyG

4

Il guscio è interpretare il ! nel vostro ingresso come una sostituzione di comando:

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

è necessario informare il guscio che ! non ha significato speciale; ci sono due modi per farlo:

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

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

o

ack-grep 'paypal_responded(?!_at)' 

stringhe racchiuse tra virgolette singole hanno meno trasformazioni applicate a loro:

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

ho provato ... ACK-grep "paypal_responded (? \! _ A)" .. ma ottenuto l'errore ... " ack-grep: regex non valida 'paypal_responded (? \! _ at)': Sequenza (? \ ...) non riconosciuta nell'espressione regolare, contrassegnata da <- QUI in m/paypal_responded (? \ <- HERE! _at)/" – TobyG

+0

Sheesh, c'è ovviamente più di quanto mi aspettassi - i miei semplici esempi funzionavano esattamente come volevo, ma quello più lungo con' (?! _ At) 'fallisce in modi orribili ed è facile capire perché stavi guidando te stesso noci cercando di farlo funzionare. 'ack-grep" paypal_responded \ (? \! _ a \) "' funziona bene .... ma non riesco a spiegarlo. – sarnold