2012-02-09 28 views
16

que estoy tratando de utilizar este comando:SED buscar y reemplazar con llaves

sed -i 's#\{test1\}#test2#' /example/myfile.txt 

Para reemplazar las instancias de {test1} con test2.

me sale el error:

sed: -e expression #1, char 17: Invalid preceding regular expression 

Am No me escapa de las llaves correctamente?

+1

Hmm ... Quité las barras diagonales inversas y parece que funciona bien. – atdev

Respuesta

22
sed -i 's#{test1}#test2#' /example/myfile.txt 

No es necesario escapar {}

21

No está escapando de las llaves en absoluto. En sed, las expresiones regulares predeterminadas son BRE, donde \{ y \} indican una expresión de rango. Como test1 no es un rango, su BRE es incorrecto.

solucionarlo, puede soltar las barras invertidas (llaves no son especiales en sobres de respuesta) o mantenerlo igual y dicen sed para usarla EREs (-r marca con sed de GNU, -E, marca con BSD/MacOSX SED).

+0

TIL BRE ERE. Los BRE son bastante útiles en el mundo 'sed'. – ericsoco