2011-12-05 15 views
10

Tengo un problema con el uso de ack-grep con una mirada negativa hacia adelante.Ack y lookahead negativo dando errores

Me postulo este comando:

ack-grep "paypal_responded(?!_at)" 

pero estoy consiguiendo el error:

bash: !_at: event not found 

He intentado agregar barras invertidas en varios lugares, pero también soy nuevo en el uso ACK & linux, así que trátame como novato con cualquier instrucción.

Gracias de antemano.

Respuesta

16

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

que necesita, comilla simple para evitar la fiesta de interpretar ! como la historia de comandos ampliar.

+2

Cosas geniales. Eso lo ha solucionado Gracias: o) – TobyG

+0

@TobyG ¿Te importaría aceptar esto como una respuesta para que esta pregunta ya no quede sin respuesta? ¡Gracias! – user1251007

+0

Lo siento. Esto se remonta a mis primeros días aquí y no me daba cuenta de que no había aceptado una respuesta. Hecho ahora. – TobyG

4

La cáscara es la interpretación de la ! en su entrada como una sustitución de orden:

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

tiene que decirle a la cáscara que ! tiene ningún significado especial; hay dos maneras de hacerlo:

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

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

o

ack-grep 'paypal_responded(?!_at)' 

cadenas entre comillas simples tienen un menor número de transformaciones aplicadas a ellos:

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

Intenté ... ack-grep "paypal_responded (? \! _ At)" .. pero obtuve el error ... " ack-grep: regex no válida 'paypal_responded (? \! _ at)': Secuencia (? \ ...) no reconocida en expresiones regulares, marcada por <- AQUÍ en m/paypal_responded (? \ <- ¡AQUÍ! _at)/" – TobyG

+0

Sheesh, obviamente hay más cosas de las que esperaba, mis ejemplos simples funcionaron exactamente como yo quería, pero el más largo con' (?! _ At) 'falla de maneras horribles y es fácil ver por qué manejabas tú mismo tuercas tratando de hacerlo funcionar. 'ack-grep" paypal_responded \ (? \! _ at \) "' funciona bien ... pero no puedo explicarlo. – sarnold

Cuestiones relacionadas