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.