Você deixou de fora da âncora ( símbolo de cursor ). Aqui estão os comandos modificados que correspondem apenas a linhas inteiras (e não combinam substrings):
grep -E '^(.).*$' input
grep -E '^(.)(.).*.$' input
grep -E '^(\w){1}.*[[:punct:]]$' input
Você provavelmente também desejará modificar seus segundo e terceiro comandos.
O segundo comando não exige dois grupos de captura . Você pode fazer isso com apenas um:
grep -E '^.(.).*.$' input
O terceiro comando está incorreto: ele irá combinar strings com várias palavras. Uma versão corrigida pode ser:
grep -E '^\w+[[:punct:]]$' input