Você entendeu mal a sintaxe regex. [16-32]
não significa "correspondência 16, 17, ... ou 32". Significa "associe um caractere que seja 1 ou 2 ou no intervalo 6-3" (que não é um intervalo válido, daí o erro).
É possível escrever um regex para corresponder a um intervalo de inteiros, mas é complexo e propenso a erros. No seu caso, seria muito mais fácil usar a nmap
option de --exclude
para excluir os intervalos que você não quer. Ele entende a notação CIDR, que é uma maneira muito mais simples de descrever os intervalos que você está falando.
nmap -n -iR 0 --exclude 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,224-255.-.-.- -sL >RANDOM-IPS.txt
Você não mencionou o bloco de loopback (127.0.0.0/8), mas provavelmente deve excluí-lo também.