printf '192.168.1.%d\n' {1..251}
Isso usará a expansão de chave de bash (originalmente um recurso zsh , também disponível em ksh93 ) para gerar números entre 1 e 251 e para cada número o printf imprimirá um endereço IP com o número inserido no final.
O seguinte seria ler um endereço IP e fazer o mesmo com isso:
IFS='.' read a1 a2 a3 a4
printf -- "$a1.$a2.$a3.%d\n" {1..251}
Se você quisesse usar awk :
awk 'BEGIN { OFS = FS = "." } { for (i = 1; i <= 251; ++i) print $1, $2, $3, i }' <<<"$IP"
Queremos que o delimitador de campo de entrada e saída seja um ponto, por isso, definimos FS e OFS para esse caractere em um bloco BEGIN . Em seguida, lemos os endereços IP da entrada padrão e, para cada endereço IP, iteramos de 1 a 251 e imprimimos a lista.
Na linha de comando, alimentamos $IP como "string aqui" (originalmente um recurso de zsh , mas também disponível em bash e ksh93 ).