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
).