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 g
modificador 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 sed
está 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 g
al final, significa "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
man sed
Ubuntu, la -r
opció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.
g
bandera para la sustitución global, tampoco necesita la-r
opción aquí.