Respostas:
Supondo que você realmente queira dizer é que deseja excluir tudo até o último dois pontos e deixar john.doeintacto:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
A primeira linha apenas envia a cadeia de teste sedpara fins de exemplo.
A segunda é uma sedsubstituição básica . A parte entre o primeiro e o segundo /é o regex a ser pesquisado e a parte entre o segundo e o terceiro é o que substituí-lo (nada neste caso, como estamos excluindo).
Para a regex, .corresponde a qualquer caractere, *repete isso várias vezes (incluindo zero) e :corresponde a dois pontos. Tão efetivamente é qualquer coisa seguida por dois pontos. Como .*pode incluir dois pontos, a correspondência é "gananciosa" e tudo até o último dois pontos é incluído.
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
Estou substituindo todas as ocorrências de : por uma guia e, em seguida, usando awkpara extrair a sequência john.doe.
Se você não possui um arquivo, pode tentar isso.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
De acordo com os comentários de Graeme, podemos usar awkpara imprimir a última coluna sozinha, usando a NFvariável awkabaixo.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Incorporando os comentários de Graeme para se livrar de desnecessários sed
O comando pode ser modificado como abaixo.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk. Basicamente, tento testar os comandos que obtive originalmente na minha resposta e modificá-los de acordo com os requisitos do usuário. :)
-Fopção para awkespecifica o separador de campos. Se você disser awkpara usar dois pontos, não será necessário substituir os dois pontos por guias. Além disso, se você deseja obter o último campo que pode usar em $NFvez de $4, isso funcionaria se nem sempre houver três pontos.
Outro método usando awk:
awk -F: '{ print $NF }'
Tente por favor
editar: âncora removida
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
e excluir
echo 'abc:fjk' |sed 's/.*://g'
^âncora não faz diferença no caso da pergunta ou no seu exemplo. Qualquer endereço que comece com /.*já implica em ^.
awk, por que não usarawk -F:?