Assumir o que você realmente quer dizer é que deseja excluir tudo dos últimos dois pontos e deixar o john.doe intact:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
Explicação:
A primeira linha apenas canaliza a string de teste para sed , por exemplo.
A segunda é uma sed substituição básica. A parte entre o primeiro e o segundo / é o regex para procurar e a parte entre o segundo e o terceiro é para substituí-lo (nada neste caso, pois estamos excluindo).
Para o regex, . corresponde a qualquer caractere, * repete esse número qualquer (incluindo zero) e : corresponde a dois pontos. Então, efetivamente, é qualquer coisa seguida por dois pontos. Como .* pode incluir dois pontos, a correspondência é "gulosa" e tudo até os últimos dois pontos é incluído.