es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

sed sustituir con regex

Tengo un archivo test123.txt que contiene una instancia de una cadena como clover-12345678.tmp, donde el prefijo es siempre clover-, el sufijo es siempre .tmp, pero el número en el medio puede ser cualquier número de 8 dígitos.

Quiero sustituir esta cadena en el archivo por una diferente, butterfly.

La expresión regular para la cadena que quiero sustituir es clover-\d\d\d\d\d\d\d\d\.tmp.

Mi comando sed para la sustitución es:
linux
sed -i -e "s/clover-\d\d\d\d\d\d\d\d.tmp/butterfly/g" test123.txt

Sin embargo, esto no cambia nada en el archivo test123.txt, aunque contiene una instancia de clover-12345678.tmp.

¿Cómo puedo solucionar esto?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema puede deberse al uso de barras invertidas antes de los dígitos, ya que las barras invertidas tienen un significado especial en sed. Para solucionarlo, las barras invertidas antes de los dígitos deben escaparse agregando otra barra invertida.

    El comando sed corregido sería:

    sed -i -e "s/clover-\\d\\{8\\}\.tmp/butterfly/g" test123.txt
    

    Este comando utiliza las llaves {} para indicar la repetición del dígito \d ocho veces, y escapa el punto . (que tiene un significado especial en regex) con una barra invertida.

    Al ejecutar este comando, se debería reemplazar la instancia de clover-12345678.tmp con butterfly en el archivo test123.txt.

Comments are closed.