Respuestas:
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, creará un archivo de copia de seguridad:
$ 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
, hay ligeras diferencias en el formato entre diferentes sed
implementaciones.
sed
no hace edición en el lugar. Crea un nuevo archivo y sobrescribe el antiguo, el inodo cambia.
{ rm file; cmd > file; } < file
llevaría a la conclusión de que cmd lee y escribe en el mismo archivo, lo que no hace. Son dos archivos de distinción que tienen el mismo nombre. Pero no quiero comenzar una discusión aquí.
sed: 1: "foo.txt": invalid command code f
cuando se ejecuta sed -i 's/o/X/g' foo.txt
. Sin embargo, proporcionar una extensión, como sed -i .bak 's/o/X/g' foo.txt
funciona bien. ¿Alguna idea de cómo hacer que funcione sin crear archivos de copia de seguridad?
sed -i '' 's/o/X/g' foo.txt
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
-e
la opción es para ejecutar múltiples sed
comandos
sed -e 's/linux/unix/' -e 's/os/OS/' file.txt
considerar file.txt
como
linux os
entonces O / P es
unix os
-i
la opción guarda los cambios de forma permanente ...
-e
bandera significa expresión. Probablemente quieras la-i
bandera que significain-place
y te recomiendo que usessed -i.bak 's/../' filename