Eu sugeriria algo como:
grep -E '^[[:upper:]][[:lower:]]{5}[[:digit:]]{2}$' input
ou com [[ .. ]]
condicional do Bash:
[[ $pass =~ ^[[:upper:]][[:lower:]]{5}[[:digit:]]{2}$ ]] && echo OK
Eu preciso de uma expressão regular para atender aos critérios de uma política básica de senha.
1º caractere é uma capital termina com 2 dígitos tem 8 caracteres de comprimento
Aqui está o que eu tenho até agora.
^(?=.*[A-Z])^(?=.*[a-z])(?=.*\d)(?=.*\d).{8,}$
Ele atende aos critérios que eu quero, e. Passwo12
mas também corresponde a
Passw123 (unacceptable)
Pa234567 (unacceptable)
Eu quero que seja restrito a especificamente [capital] [minúscula [a-z] x5] [dígito x2]
Faça um teste para cada critério, o que facilitará a manutenção e a extensão.
^[[:upper:]]
[[:digit:]][[:digit:]]$
^.{8}$
^.[[:lower:]]*..$
Com sed
(somente será permitido o uso de senhas correspondentes aos critérios acima):
sed -r \
-e '/^[[:upper:]]/!d' \
-e '/[[:digit:]][[:digit:]]$/!d' \
-e '/^.{8}$/!d' \
-e '/^.[[:lower:]]*..$/!d'
Dessa forma, você pode facilmente adicionar outros critérios ou modificar os existentes (mais ou menos) independentemente dos outros.
O -r
é para permitir a expressão regular estendida no critério nº 3.
sed
coisa que irá comentar sobre as formas como as senhas não cumprem os critérios:
sed -r \
-e '/^[[:upper:]]/!a\
No initial upper-case
' \
-e '/[[:digit:]][[:digit:]]$/!a\
No trailing digits
' \
-e '/^.{8}$/!a\
Not 8 characters
' \
-e '/^.[[:lower:]]*..$/!a\
Not only lower-case middle chars
Você não pode fazer isso se colocar tudo em uma única expressão regular ...
Tags regular-expression