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?
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:
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
conbutterfly
en el archivotest123.txt
.