Saltar al contenido

¿Cómo extrae direcciones IP de archivos usando una expresión regular en un shell de Linux?

Necesitamos tu apoyo para difundir nuestros tutoriales acerca de las ciencias informáticas.

Solución:

Podrías usar grep para sacarlos.

grep -o '[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.[0-9]1,3' file.txt

La mayoría de los ejemplos aquí coincidirán con 999.999.999.999, que técnicamente no es una dirección IP válida.

Lo siguiente coincidirá solo con direcciones IP válidas (incluidas las direcciones de red y de transmisión).

grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt

Omita -o si desea ver la línea completa que coincidió.

Esto funciona bien para mí en los registros de acceso.

cat access_log | egrep -o '([0-9]1,3.)3[0-9]1,3'

Vamos a dividirlo parte por parte.

  • [0-9]1,3 significa de una a tres ocurrencias del rango mencionado en []. En este caso es 0-9. por lo que coincide con patrones como 10 o 183.

  • Seguido de un ‘.’. Tendremos que escapar de esto como ‘.’ es un metacarácter y tiene un significado especial para el shell.

Así que ahora estamos en patrones como ‘123’. ’12.’ etc

  • Este patrón se repite tres veces (con el ‘.’). Así que lo encerramos entre paréntesis.
    ([0-9]1,3.)3

  • Y por último el patrón se repite pero esta vez sin el ‘.’. Es por eso que lo mantuvimos por separado en el 3er paso. [0-9]1,3

Si las ips están al principio de cada línea como en mi caso use:

egrep -o '^([0-9]1,3.)3[0-9]1,3'

donde ‘^’ es un ancla que indica buscar al comienzo de una línea.

Si guardas algún reparo y forma de reformar nuestro noticia puedes ejecutar un paráfrasis y con deseo lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *