Com a seguinte grep
sintaxe, quero corresponder a todos os endereços IP em um arquivo (de um ksh
script)
grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' file
O problema: também corresponde a palavras (IP) com mais de 4 octetos:
1.1.1.1.1
ou
192.1.1.1.160
Como posso combinar um IP válido e apenas endereços IP com 4 octetos? Também posso usar o Perl - uma solução de sintaxe de uma linha, se grep
não funcionar.
regex
grep
ip-address
Jennifer
fonte
fonte
999.999.999.999
também.192.1.4097
válidos e aceitos pelo Linux glibc e Windows.ping 2130706433
, No OS X:PING 2130706433 (127.0.0.1): 56 data bytes
.0x7f.1
and0177.1
Respostas:
tente isto:
que corresponde a todas as expressões de
0.0.0.0
a999.999.999.999
com
você receberá apenas endereços IP
nota:
no solaris provavelmente o egrep fará o trabalho.
fonte
grep -E <pattern> <file>
(ou, para imprimir as correspondências:grep -Eo <pattern> <file>
1.1.1.1.1
mas oculta o último.1
resultado, não consigo ver como isso pode ajudar.Como é isso:
fonte
192.1.1.1.160
como192.1.1.1
, o que eu acho que é bom para o consulente pergunta.)o
sinalize para
grep
que ele corresponda apenas aos limites das palavras, o que significa que sua correspondência deve estar entre espaços em branco ou iniciar / terminar no início / final da linha!fonte
Para encontrar apenas correspondências com 4 octetos exatamente (excluindo itens como 1.1.1.1.1), use o seguinte:
Ele nunca deve detectar endereços não IP. A expressão pode ser mais complexa para verificar mais coisas, mas isso deve funcionar na maioria dos casos. Ele não corresponderá a um 0 anterior, pois 010.1.12.1 não é uma maneira comum de escrever endereços IP.
fonte
fonte
Um pouco complicado, mas deve funcionar:
fonte
127.000.000.001
então? ;-)ping 127.000.000.001
certamente funciona no meu Mac. Mas então: acabei de aprender que atéping 2130706433
produz o mesmo resultado. :-) Opa,ping 00127.00000.00000.00001
traduz para87.0.0.1
. Estranho ... Ou octal talvez? Sim, octal, com certeza, então você está certo sobre zeros à esquerda, eu acho.Versão modificada da resposta de Arnaud B.
Essa expressão não corresponderá aos endereços IP com os 0s iniciais. por exemplo, não corresponderá a 192.168.1.01 Essa expressão não corresponderá a endereços IP com mais de quatro octetos. por exemplo, não corresponderá a 192.168.1.2.3
fonte
Estou usando
egrep "^([0-9]{1,3}\.){3}[0-9]{1,3}" /etc/hosts
para combinar endereços IP no início de uma linha. Também pode ser usado sem o^
para permitir espaços em branco ou outros caracteres antes do endereço IP.fonte
Uma versão mais curta do regex longo:
Use grep -E ou egrep conforme adequado à sua versão do sistema operacional
fonte
echo "8.8.8.8" | grep -Eo '([1-2][0-9]{0,2}\.){3,3}[1-2][0-9]{0,2}'
=> sem resultado #grep -Eo '([0-9] {1,3}.?) {4}'
Exemplo: enrolar http://korben.info/ip | grep "IP visível entre mon servur" | grep -Eo '([0-9] {1,3}.?) {4}'
fonte
Expressão regular para corresponder a um endereço IP no TCL
fonte
Aqui está o que funcionou para mim para o ksh e o ksh93 no 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])]] && eco OK || eco NOK O código acima pode ser modificado para "filtrar" o IP fornecido para o padrão desejado.
fonte