Tengo un script que genera algunos resultados. Quiero verificar esa salida para cualquier dirección IP como
159.143.23.12
134.12.178.131
124.143.12.132
if (IPs are found in <file>)
then // bunch of actions //
else // bunch of actions //
Es fgrep
una buena idea?
Tengo bash disponible.
shell-script
grep
ip
Koshur
fuente
fuente
0010.0000.0000.0001
? ¿Puede el archivo contener cosas que parecen direcciones IP como números de versión (soft-1.2.1100.1.tar.gz
, especificaciones de red (10.0.0.0/24), 1.2.3.4.5)? ¿Aceptaría una solución que sea positiva en 333.444.555.666? ¿O0377.0377.0377.0377
(una dirección IP quad-octal válida)?bash
está disponible,awk
generalmente también lo está, por lo que esto podría funcionar para usted:awk '/([0-9]{2,3}\.){3}/ {print $5 "\t" $1}'
(Esta línea traduce la salida de la lista XFR del host al/etc/hosts
formato).Respuestas:
Sí, tiene muchas opciones / herramientas para usar. Acabo de probar esto, funciona:
ifconfig | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
para que pueda usar
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
grep las direcciones IP de su salida.fuente
"\b([0-9]{1,3}\.){3}[0-9]{1,3}\/[0-9][0-9]?"
para buscar CIDR (suponiendo que sean válidos)comenzando mi respuesta basada en esta respuesta:
y convertir la respuesta a IPv6 de longitud completa, etc.
si quieres mantener el / nnn si está ahí:
y también está la versión abreviada de IPv6 que incluye '::'.
Para obtener más respuestas de IPv6, puede consultar aquí: /programming/53497/regular-expression-that-matches-valid-ipv6-addresses
fuente
fgrep
es el nombre antiguo de una variantegrep
que ignora la coincidencia de patrones. Me gustaría recomendar que utilicegrep
(o inclusoegrep
) en lugar, especialmente en lo que está claramente querer coincidencia de patrones.Si su archivo se llama, por ejemplo
ips
, puede escribir algo como:Luego puede pasar los parámetros como sigue el script
fuente
Si tiene la lista de IP en un archivo, una por línea,
grep
ya tiene la-f
opción conveniente :Esto puede causar algunos falsos positivos debido a cadenas opcionalmente seguidas de otro número para que sea una IP diferente. Muchas cosas que puede hacer al respecto, dependiendo de su caso, puede decidir o no preocuparse.
fuente
Probado en SmartOS (una variante de Solaris), con suerte debería funcionar en otros entornos * nix:
Ejemplo:
Este patrón solo coincide con IPv4 válido , es decir,
x.x.x.x
donde elx
rango va de 0 a 255. Si necesita extraer solo la IP coincidente, agregue una-o
opción al comando anterior. Podría incrustar este comando en un script bash y presumiblemente también en otros scripts de shell. Y, siegrep
falla,try grep -E ...
Utilizándolo en un script de shell (bash):
ip=$(egrep -o '(([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])' file.txt) echo $ip
fuente
Creo que mi respuesta a otra publicación es más adecuada aquí. Gracias a esta publicación y a otras similares, se me ocurrió esto, que busca el formato IP correcto y luego elimina todas las líneas que contienen 256 o más. Reemplace la IP con algo que no sea válido para no ver ninguna salida en su lugar:
El primer grep probablemente se encontró en esta publicación y verifica los números del 0-999 en el formato XXXX
El segundo grep elimina líneas con números 256-999, dejando solo direcciones IP de formato válidas, así que pensé
PERO ... Como señaló G-Man, estaba en un error al suponer que la IP estaría en su propia línea. Sin embargo, la mayoría de las veces habrá un espacio u otro divisor para buscar a ambos lados de la IP. Los espacios / divisores se pueden eliminar con sed u otros medios después de encontrar la IP. También agregué -o al primer grep:
El primero y el segundo no darán salida, mientras que el tercero sí y los espacios se eliminarán.
fuente
grep
tiraría esa línea debido a los "500". (La pregunta nunca dijo que las direcciones IP en el archivo, si las hubiera, estarían en una línea por sí mismas). Por otro lado, aceptará 1234.1.1.1 y 1.1.1.1234. Pero aparte de eso, no está mal.Redirigir esa salida a algunos
outputFile
Simplemente
grep
con patrón como,fuente
.
es un operador de expresión regular y necesita escapar para que sea tratado literalmentefuente