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 fgrepuna 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)?bashestá disponible,awkgeneralmente 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/hostsformato).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
fgrepes el nombre antiguo de una variantegrepque 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,
grepya tiene la-fopció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.xdonde elxrango va de 0 a 255. Si necesita extraer solo la IP coincidente, agregue una-oopción al comando anterior. Podría incrustar este comando en un script bash y presumiblemente también en otros scripts de shell. Y, siegrepfalla,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 $ipfuente
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
greptirarí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
outputFileSimplemente
grepcon patrón como,fuente
.es un operador de expresión regular y necesita escapar para que sea tratado literalmentefuente