Respostas:
Supondo que você realmente queira dizer é que deseja excluir tudo até o último dois pontos e deixar john.doe
intacto:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
A primeira linha apenas envia a cadeia de teste sed
para fins de exemplo.
A segunda é uma sed
substituiçã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 awk
para 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 awk
para imprimir a última coluna sozinha, usando a NF
variável awk
abaixo.
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. :)
-F
opção para awk
especifica o separador de campos. Se você disser awk
para 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 $NF
vez 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:
?