ack + grep + no coincide realmente con la cadena

1

Utilizo la herramienta ack (como grep pero más fuerte) para hacer coincidir cadenas en archivos

Por favor, eche un vistazo al siguiente ejemplo de ack

  ./ack -a 127.0.0.1 /var/ntp/ntpstats/file

   55305 57262.736 10.106.190.191 9624 0.000460 0.00127 0.00168

Quiero buscar solo la IP 127.0.0.1 en / var / ntp / ntpstats / file

pero ack devuelve la línea:

   55305 57262.736 10.106.190.191 9624 0.000460 0.00127 0.00168

Parece que ack coincide con 127.0.0.1 pero en realidad la línea no tiene la dirección 127.0.0.1

¿Alguien puede darme consejos sobre cómo combinar exactamente con la herramienta ack? (¿Quizás algunas banderas faltantes después de un reconocimiento?)

Gracias

jennifer
fuente
ack no es más fuerte, ¡es más débil! :-)
Jonathan Hartley

Respuestas:

3

El .es un meta personaje en Perl. Significa "coincidir con cualquier personaje". Tienes tres opciones.

  • ack '127\.0\.0\.1' Esto cita cada período, haciendo que cada uno sea un período real.
  • ack '\Q127.0.0.1' En expresiones regulares de Perl, \Qsignifica "citar todos los metacaracteres después de la \ Q"
  • ack -Q 127.0.0.1 Como \Qes tan común, ack tiene el -Qinterruptor que significa lo mismo.

Además, te veo usando el -ainterruptor, presumiblemente para asegurarte de que coincidas con los archivos que no tienen una extensión. Esto es innecesario si especifica un archivo para buscar.

Andy Lester
fuente
¡No todos los días alguien recibe una respuesta del autor de la herramienta por la que están preguntando! :)
daxelrod
Debería ser. Tengo una alerta de Google para ack. Otros autores pueden hacer lo mismo.
Andy Lester
2

A .en una expresión regular coincide con cualquier carácter único que no sea una nueva línea. Tendrá que escapar si desea que coincida con un período literal.

./ack -a '127\.0\.0\.1' /var/ntp/ntpstats/file
Ignacio Vazquez-Abrams
fuente
0

Solo para elaborar la respuesta de Ignacio:

55305 57262.736 10.106.190.191 9624 0.000460 0.00127 0.00168
                                                 ^^^^^^^^^

Como puede ver, con el carácter comodín (.) La parte anterior de la línea coincide con sus criterios de búsqueda.

JRT
fuente