Con la siguiente grep
sintaxis, quiero hacer coincidir todas las direcciones IP en un archivo (de un ksh
script)
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
El problema: también coincide con palabras (IP) que tienen más de 4 octetos:
1.1.1.1.1
o
192.1.1.1.160
¿Cómo puedo hacer coincidir una IP válida y solo direcciones IP con 4 octetos? También puedo usar Perl, una solución de sintaxis de una línea, si grep
no funciona.
regex
grep
ip-address
jennifer
fuente
fuente
999.999.999.999
.192.1.4097
válidas y aceptadas por Linux glibc y Windows.ping 2130706433
, En OS X:PING 2130706433 (127.0.0.1): 56 data bytes
.0x7f.1
y0177.1
Respuestas:
prueba esto:
que coincide con todas las expresiones de
0.0.0.0
a999.999.999.999
con
solo obtendrá direcciones IP
nota:
en solaris probablemente egrep hará el trabajo.
fuente
grep -E <pattern> <file>
(o, simplemente imprimir las coincidencias:grep -Eo <pattern> <file>
1.1.1.1.1
pero oculta lo último.1
de la salida, no puedo ver cómo puede ayudar.Cómo es esto:
fuente
192.1.1.1.160
como192.1.1.1
, lo que creo que está bien para el que hace la pregunta.)los
marcar para
grep
que solo coincida en los límites de palabras, lo que significa que su coincidencia debe estar rodeada por espacios en blanco o comenzar / finalizar al principio / final de la línea.fuente
Para encontrar solo coincidencias con 4 octetos exactamente (excluyendo cosas como 1.1.1.1.1) use esto:
Nunca debe detectar direcciones que no sean IP. La expresión podría ser más compleja para verificar más cosas, pero esto debería funcionar para la mayoría de los casos. No coincidirá con un 0 anterior ya que 010.1.12.1 no es una forma común de escribir direcciones IP.
fuente
fuente
Un poco complicado, pero debería funcionar:
fuente
127.000.000.001
entonces? ;-)ping 127.000.000.001
seguramente funciona en mi Mac. Pero entonces: acabo de enterarme de que inclusoping 2130706433
produce el mismo resultado. :-) Vaya, seping 00127.00000.00000.00001
traduce en87.0.0.1
. Extraño ... O tal vez octal? Sí, octal seguro, así que tienes razón sobre los ceros iniciales, supongo.Versión modificada de la respuesta de Arnaud B.
Esta expresión no coincidirá con las direcciones IP con ceros a la izquierda. por ejemplo, no coincidirá con 192.168.1.01. Esta expresión no coincidirá con las direcciones IP con más de 4 octetos. por ejemplo, no coincidirá con 192.168.1.2.3
fuente
Estoy usando
egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts
para hacer coincidir las direcciones IP al comienzo de una línea. También se puede usar sin^
permitir espacios en blanco u otros caracteres antes de la dirección IP.fuente
Una versión más corta de la expresión regular larga:
Utilice grep -E o egrep según sea adecuado para la versión de su sistema operativo
fuente
echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'
=> ningún resultadogrep -Eo '([0-9] {1,3}.?) {4}'
Ejemplo: curl http://korben.info/ip | grep "IP visible depuis mon serveur" | grep -Eo '([0-9] {1,3}.?) {4}'
fuente
Expresión regular para hacer coincidir una dirección IP en TCL
fuente
Esto es lo que funcionó para mí para ksh y ksh93 en AIX:
ip =
[[$ ip == [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9]). [0-9] @ ("" | [0-9]) @ ("" | [0-9])]] && echo OK || echo NOK Lo anterior se puede modificar para "filtrar" la IP proporcionada al patrón que se desee.
fuente