
¿Cómo reemplazo la siguiente cadena?
hd_ma_prod_customer_ro:*:123456789:john.doe
con john.doe
Básicamente, necesito buscar los últimos dos puntos (:) y eliminar todo lo anterior e incluirlo.
Respuesta1
Suponiendo que lo que realmente quieres decir es que deseas eliminar todo hasta los últimos dos puntos y dejarlo intacto john.doe
:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
Explicación:
La primera línea simplemente canaliza la cadena de prueba para sed
fines de ejemplo.
El segundo es un básico.sed
sustitución. La parte entre la primera y la segunda /
es la expresión regular a buscar y la parte entre la segunda y la tercera es con qué reemplazarla (nada en este caso ya que estamos eliminando).
Para la expresión regular, .
coincide con cualquier carácter, *
lo repite cualquier número de veces (incluido cero) y :
coincide con dos puntos. Así que efectivamente es cualquier cosa seguida de dos puntos. Como .*
puede incluir dos puntos, la coincidencia es "codiciosa" y se incluye todo hasta los últimos dos puntos.
Respuesta2
Otro método usando awk
:
awk -F: '{ print $NF }'
Respuesta3
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
Estoy reemplazando todas las ocurrencias de:con unpestañay luego usar awk
para extraer la cadena john.doe.
Si no tiene un archivo, puede intentar esto.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
Según los comentarios de Graeme, podemos awk
imprimir la última columna sola usando la NF
variable de awk
como se muestra a continuación.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Incorporar los comentarios de Graeme para deshacerse de comentarios innecesarios.sed
El comando se puede modificar como se muestra a continuación.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
Respuesta4
Por favor, inténtalo
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
y para borrar
echo 'abc:fjk' |sed 's/.*://g'