O padrão estendido que corresponde a itens que se parecem com endereços IPv4 e estão apenas entre o intervalo de 0.0.0.0 e 255.255.255.255 é:
((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((2[0-4][0-9])|(25[0-5])|(1[0-9][0-9])|([1-9][0-9])|[0-9])
Você precisará usar egrep
(ou grep -E
) com essa expressão e com tudo o que segue.
Observe que isso também detectará exceções estranhas, como 1111.2.3.444, porque corresponderá a 111.2.3.44
. (Existem testes mais sofisticados que podem ser escritos, mas são ainda menos legíveis).
Se você não se preocupa com 1111.2.3.444, e você não se importa com coisas como 999.000.011.555, a regex mais simples, sugerida por ilkkachu nos comentários, é ([0-9]{1,3}\.){3}[0-9]{1,3}
.
Para procurar em todos os diretórios, você provavelmente também desejará incorporar find
:
find /var/log -type f -exec egrep '([0-9]{1,3}\.){3}[0-9]{1,3}' '{}' +
Isso usa o comportamento GNU find
de usar +
para criar uma única linha de comando em vez de executar grep
em cada arquivo em série e, por sua vez, depende de grep
imprimir o nome dos arquivos correspondentes primeiro que quase todos os grep
fazem).
A detecção de endereços IPv6 está fora do escopo desta resposta.