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
Respuestas:
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,\Q
significa "citar todos los metacaracteres después de la \ Q"ack -Q 127.0.0.1
Como\Q
es tan común, ack tiene el-Q
interruptor que significa lo mismo.Además, te veo usando el
-a
interruptor, presumiblemente para asegurarte de que coincidas con los archivos que no tienen una extensión. Esto es innecesario si especifica un archivo para buscar.fuente
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.fuente
Solo para elaborar la respuesta de Ignacio:
Como puede ver, con el carácter comodín (.) La parte anterior de la línea coincide con sus criterios de búsqueda.
fuente