Ack busca cadenas literales [cerrado]

15

Estoy harto de tener que escapar de las cosas cuando quiero buscar parte de una etiqueta html.

¿Cómo puedo buscar exactamente lo que escribo sin tener que escapar de cosas?

p.ej

ack-grep 'console.log(foo'

Yo obtengo:

Unmatched ( in regex; marked by <-- HERE in m/console.log( <-- HERE par/
ensayador
fuente
¿Usar un caparazón diferente? Ponlo entre comillas? Coloque su cadena de búsqueda en un archivo, sospecho que ack-grep puede obtener la cadena de un archivo. Quizás incluso pueda obtener la búsqueda a través de stdin.
Zoredache
@Zoredache Agregué un mejor ejemplo ... No quiero tener que escapar (... ¿y qué quieres decir con mejor shell?
probador
Me refiero a que todos los personajes de los que se queja son manejados por su shell (bash / zsh / lo que sea). El problema no tiene nada que ver con la herramienta. El problema es que el shell no envía lo que escribe.
Zoredache
Ah, creo que lo encontré ... -Q lo usa literalmente ...
probador

Respuestas:

18

Tienes que escapar de la expresión regular.

ack 'console\.log\(foo'

(Debería escapar del .para que no coincida con "consoleflog", porque .coincide con cualquier carácter individual)

Y si prefiere no hacerlo, haga esto para citar cada metacarácter automáticamente.

ack -Q 'console.log(foo'
Andy Lester
fuente
2
\ Q no funciona en mi servidor. ack '\Qconsole.log(foo' ack: Invalid regex '\Qconsole.log(foo': Unmatched ( in regex; marked by <-- HERE in m/\Qconsole.log( <-- HERE foo/
Sébastien
Me equivoqué con el \Qejemplo y lo eliminé de la respuesta. Gracias, @ Sébastien.
Andy Lester