Linux CentOS expressão grep

0

Estou tentando encontrar uma expressão grep que encontre um endereço IP em qualquer arquivo dentro de cada arquivo e diretório.

Ainda não dominei o grep, mas acho que deveria haver "?" algo simples. Alguma idéia?

    
por Snowcat 08.12.2017 / 21:21

1 resposta

3

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.

    
por 08.12.2017 / 21:26