at least one digit, followed by an arbitrary number of additional digits
+ já é "um ou mais", portanto, [[:digit:]][[:digit:]]+ exigiria pelo menos dois. Então, [[:digit:]]+ .
words (at least one) each beginning with a capital letter or number, followed by any number of lower and upper case letters, numbers, or periods (.)
Um capital ou um número: [[:upper:][:digit:]] , não há necessidade de alternância ( | ) aqui, pois podemos usar as duas classes de caracteres dentro dos colchetes ao mesmo tempo.
[[:alphabet:]] não é uma classe de caracteres válida, mas há alpha e alnum (para letras ou números). Este último pode ser útil.
Uma única palavra: [[:upper:][:digit:]][[:alnum:].]*
Múltiplas palavras, com espaços em branco na frente de cada uma (que cuida do espaço em branco depois do número inicial também): ([[:blank:]]+[[:upper:][:digit:]][[:alnum:].]*)+
Como você deseja corresponder à linha completa, adicione ^ e $ às extremidades ou use grep -x . Você pode adicionar [[:blank:]]* ao final (antes de $ ) para permitir espaços em branco fáceis de serem deixados por acidente.
Isso imprimiria apenas as três primeiras linhas da sua entrada de amostra:
grep -E '^[[:digit:]]+([[:blank:]]+[[:upper:][:digit:]][[:alnum:].]*)+$' file
Há uma ferramenta on-line para jogar com regexes no link
que você pode achar útil para testes. Note que o acima requer grep -E por causa do + (a alternativa é feia), mas eu não acho que o regex101 permita o uso básico simples de grep regexes.