¿Cómo puedo hacer que mi comando sed realice cambios permanentes en un archivo?

¿Cómo puedo hacer que mi comando sed realice cambios permanentes en un archivo?

es posible? Leí en alguna parte que el siguiente comando lo haría:

sed -e [comando] [archivo]

pero parecía hacer lo mismo que simplemente

sed [comando] [archivo]

(no guardó los cambios). ¿Hay alguna manera de hacer esto usando sed?

Respuesta1

Creo que estás buscando -i:

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Por ejemplo:

$ cat foo.txt
hello world
$ sed -i 's/o/X/g' foo.txt
$ cat foo.txt
hellX wXrld

Si proporciona un sufijo, se creará un archivo de respaldo:

$ ls
foo.txt
$ sed -i.bak 's/o/X/g' foo.txt 
$ ls
foo.txt  foo.txt.bak

El archivo de entrada se modifica y se crea una copia de seguridad que contiene los datos del archivo original.

También tenga en cuenta que esto es para GNU sed, hayLigeras diferenciasen formato entre diferentes sedimplementaciones.

Respuesta2

Esta solución funciona para HPUX (UNIX):

1. { rm test1.sh && awk '{gsub("Error", "NO_Error", $0); print}' > test1.sh; } < test1.sh:

2. perl -pi -e 's/Error/NO_Error/g' test1.sh

3. sed 's/Error/NO_Error/g' test1.sh | tee test1.sh

Respuesta3

-eLa opción es para ejecutar múltiples sedcomandos.

sed -e 's/linux/unix/' -e 's/os/OS/' file.txt

considerar file.txtcomo

linux os

entonces O/P es

unix os

-iLa opción guarda los cambios permanentemente...

información relacionada