O plain grep usa expressões regulares básicas. Sua regex usa -d e ? e {m,n} que não são reconhecidos.
Você deseja grep -E , mas isso pode não reconhecer \d . Se não mudar para [0-9]
grep -Erle '[3-6][0-9]{3}([ -]?)[0-9]{4}([ -]?)[0-9]{4}([ -]?)[0-9]{3,4}' *
Ou use grep -P para usar regexes compatíveis com perl
Ref: link