Como substituo a seguinte string
hd_ma_prod_customer_ro:*:123456789:john.doe
com john.doe
Basicamente, eu preciso procurar o último dois pontos (:) e excluir tudo antes e incluí-lo.
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
, por que não usarawk -F:
?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 paraawk
especifica o separador de campos. Se você disserawk
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
:fonte
Tente por favor
editar: âncora removida
e excluir
fonte
^
âncora não faz diferença no caso da pergunta ou no seu exemplo. Qualquer endereço que comece com/.*
já implica em^
.