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, sed
utilizaexpresiones 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 -r
opción para sed
denota ERE:
-r, --regexp-extended
use extended regular expressions in the script.
Además, el uso -e
es 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'