Usando sed para realizar sustituciones en un archivo

Usando sed para realizar sustituciones en un archivo

Estaba intentando reemplazar fechas en un archivo enorme usando sed. Lo intenté :

sed -ie 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

Sin embargo, no pasó nada en absoluto, mi archivo de prueba no se modifica. ¿Sabes lo que me estoy perdiendo aquí?

Muchas gracias.

Respuesta1

Por defecto, sedutilizaexpresiones regulares básicas. En BRE, , , {actúan }como personajes normales. Como tal, necesitarías escapar de y :(){}

sed -i 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

No necesitaría escapar de ellos si usa expresiones regulares extendidas, es decir

sed -r -i 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g' test

La -ropción para seddenota ERE:

   -r, --regexp-extended

          use extended regular expressions in the script.

Además, el uso -ees redundante en su ejemplo.

Respuesta2

Intente escapar de las llaves:

sed -ie 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g' test

Respuesta3

Cualquiera

echo "foo 2014-01-01 bar" | sed -r 's/2014-[0-9]{2}-[0-9]{2}/2014-05-07/g'

o

echo "foo 2014-01-01 bar" | sed 's/2014-[0-9]\{2\}-[0-9]\{2\}/2014-05-07/g'

información relacionada