Como usar o Sed para substituir todos os caracteres antes dos dois pontos?

Como usar o Sed para substituir todos os caracteres antes dos dois pontos?

Como faço para substituir a seguinte string

hd_ma_prod_customer_ro:*:123456789:john.doe

com john.doe

Basicamente preciso procurar os últimos dois pontos (:) e deletar tudo antes e incluí-lo.

Responder1

Supondo que o que você realmente quer 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/.*://'

Explicação:

A primeira linha apenas canaliza a string de teste para sedfins de exemplo.

O segundo é básicosedsubstituição. A parte entre o primeiro e o segundo /é o regex a ser pesquisado e a parte entre o segundo e o terceiro é o que substituir (nada neste caso, pois estamos excluindo).

Para o regex, .corresponde a qualquer caractere, *repete isso quantas vezes quiser (incluindo zero) e :corresponde a dois pontos. Então, efetivamente, é qualquer coisa seguida por dois pontos. Como .*pode incluir dois pontos, a correspondência é 'ganancioso' e tudo até o último dois pontos é incluído.

Responder2

Outro método usando awk:

awk -F: '{ print $NF }'

Responder3

sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'

Estou substituindo todas as ocorrências de:com umabae depois usando awkpara extrair a string john.doe.

Se você não tiver um arquivo, você 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 awkimprimir apenas a última coluna 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 coisas desnecessáriassed

O comando pode ser modificado conforme abaixo.

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'

Responder4

Tente por favor

echo 'abc:fjk' |sed 's/.*:/john.doe/g'

e para excluir

echo 'abc:fjk' |sed 's/.*://g'

informação relacionada