¿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 antes e incluirlo.
Suponiendo que lo que realmente quiere decir es que desea eliminar todo hasta el último colon y dejar john.doeintacto:
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
La primera línea simplemente canaliza la cadena de prueba sedpara fines de ejemplo.
El segundo es una sedsustitución básica . La parte entre el primero y el segundo /es la expresión regular a buscar y la parte entre el segundo y el tercero es con qué reemplazarla (nada en este caso, ya que estamos eliminando).
Para la expresión regular, .coincide con cualquier carácter, *repite esto cualquier número de veces (incluido cero) y :coincide con dos puntos. Entonces, efectivamente, es cualquier cosa seguida de un colon. Como .*puede incluir dos puntos, la coincidencia es 'codiciosa' y se incluye todo hasta el último punto.
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
Estoy reemplazando todas las apariciones de : con una pestaña y luego la uso awkpara extraer la cadena john.doe.
Si no tiene un archivo, puede probar 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 usar awkpara imprimir la última columna solo usando la NFvariable de la awksiguiente.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Incorporando los comentarios de Graeme para deshacerse de lo innecesario sed
El comando se puede modificar de la siguiente manera.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk, ¿por qué no simplemente hacerloawk -F:?awk. Básicamente, trato de probar los comandos que obtuve originalmente en mi respuesta e intento modificarlos de acuerdo con los requisitos del usuario. :)-Fopción paraawkespecifica el separador de campo. Si le indicaawkque use dos puntos, no es necesario reemplazar los dos puntos con pestañas. Además, si desea obtener el último campo que puede usar en$NFlugar de$4, esto funcionaría si no siempre hay 3 puntos.Otro método usando
awk:fuente
Por favor, inténtalo
editar: ancla eliminada
y para borrar
fuente
^ancla no hace ninguna diferencia en el caso de la pregunta o en su caso de ejemplo. Cualquier dirección que comience/.*ya implica el^.