[1-255]
significa 1 ou 2 ou 5, não corresponderá de 1 a 255
use isso, aqui estou contando ocorrências
echo $ip | egrep -o '^([0-9]{1,3}\.){3}[0-9]{1,3}$'
[0-9]{1,3}\.
significa que o dígito 0-9 pode ser exibido três vezes seguido por ponto
([0-9]{1,3}\.){1,3}
significa que o padrão acima tem que ser três vezes
e sim, ele irá combinar IPs incorretos também.