Si ejecuto este código en bash:
echo dog dog dos | sed -r 's:dog:log:'
da salida:
log dog dos
¿Cómo puedo hacer que reemplace todas las apariciones de perro?
Si ejecuto este código en bash:
echo dog dog dos | sed -r 's:dog:log:'
da salida:
log dog dos
¿Cómo puedo hacer que reemplace todas las apariciones de perro?
Respuestas:
Debe agregar el gmodificador para que sed realice una sustitución global del contenido del búfer de patrón:
echo dog dog dos | sed -e 's:dog:log:g'
Para obtener una documentación fantástica sobre sed, consulte http://www.grymoire.com/Unix/Sed.html . Esta bandera global se explica aquí: http://www.grymoire.com/Unix/Sed.html#uh-6
La documentación oficial de GNU sedestá disponible en http://www.gnu.org/software/sed/manual/
sed -E 's,foo,bar,g'no hace lo global. Si lo cambia sed -E -e 's,foo,bar,g', funciona.
Tienes que poner un gal final, significa "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sedUbuntu, la -ropción significa "usar expresiones regulares extendidas". Entonces, el comando dado funciona bien, aunque no necesita las características de las expresiones regulares extendidas para funcionar.
gbandera para la sustitución global, tampoco necesita la-ropción aquí.