Para encontrar um espaço, você precisa usar [:space:] dentro de outro par de colchetes, que será parecido com [[:space:]] . Você provavelmente quis expressar grep -E '^[[:space:]]*h'
Para explicar por que seu atual falha:
Como está, [:space:]*h inclui uma classe de caracteres à procura de qualquer um dos caracteres: : , s , p , a , c e e que ocorrem em qualquer número de vezes (incluindo 0), seguido por h . Isso corresponde muito bem à sua string, mas se você executar grep -o , verá que correspondeu apenas a h , não o espaço.
Se você adicionar um quilate ao início, uma dessas letras ou h deve estar no início da string para corresponder, mas nenhuma é, portanto, não corresponde.