Desdobrar esse one-liner e reorganizar um pouco, além de alguns ajustes, fica:
cat /dev/urandom | \
tr -dc 'a-zA-Z0-9' | \
fold -w 16 | \
tr -d '[A-z]' | \
grep '....' | \
head -n 16
Saídas:
7405935
60722
11225
96954
3966
8774
539418
1964
59150
5994
1086
7470
2751
8534
21501
14927
Nota: os números de n dígitos são provavelmente aleatórios se considerados isoladamente, mas a distribuição de comprimento de dígitos não é . Aqui está uma corrida de 1000000, todos os dígitos mudaram para 'x', classificados e contados:
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | \
tr -d '[A-z]' | grep '....' | head -n 1000000 | \
tr '[0-9]' x | sort | uniq -c | nl -v 4
Saídas:
4 594210 xxxx
5 275196 xxxxx
6 96871 xxxxxx
7 26838 xxxxxxx
8 5738 xxxxxxxx
9 997 xxxxxxxxx
10 134 xxxxxxxxxx
11 14 xxxxxxxxxxx
12 2 xxxxxxxxxxxx
Podemos ver que quanto mais dígitos, mais improvável é um número. Em um milhão de números, apenas dois são 12 dígitos e nenhum tem 13-16 dígitos.