Tenga en cuenta que la página del manual es incorrecta. sedno hace edición en el lugar. Crea un nuevo archivo y sobrescribe el antiguo, el inodo cambia.
Marco
2
@Marco Esa es la forma segura de editar un archivo en su lugar. “Editar un archivo en el lugar” en la documentación de sed significa que el archivo original (como se define por su nombre) se modifica, no que se modifica el archivo original (según se define por su inodo).
Gilles 'SO- deja de ser malvado'
2
@Gilles Estoy totalmente de acuerdo en que esta es la forma preferida de editar un archivo, pero difícilmente lo llamaría en su lugar . Pero eso se reduce a la cuestión de cómo se identifica un archivo, por inodo o por nombre. Yo diría por inodo, de lo contrario, construcciones como { rm file; cmd > file; } < filellevarí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í.
Marco
En macOS 10.14 me sale sed: 1: "foo.txt": invalid command code fcuando 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.txtfunciona bien. ¿Alguna idea de cómo hacer que funcione sin crear archivos de copia de seguridad?
Joshua Pinter el
1
De acuerdo, lo descubrí. En macOS, debe agregar explícitamente una cadena vacía para la opción de parámetro de extensión:sed -i '' 's/o/X/g' foo.txt
-ebandera significa expresión. Probablemente quieras la-ibandera que significain-placey te recomiendo que usessed -i.bak 's/../' filenameRespuestas:
Creo que estás buscando
-i:Por ejemplo:
Si proporciona un sufijo, creará un archivo de copia de seguridad:
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 diferentessedimplementaciones.fuente
sedno hace edición en el lugar. Crea un nuevo archivo y sobrescribe el antiguo, el inodo cambia.{ rm file; cmd > file; } < filellevarí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 fcuando se ejecutased -i 's/o/X/g' foo.txt. Sin embargo, proporcionar una extensión, comosed -i .bak 's/o/X/g' foo.txtfunciona bien. ¿Alguna idea de cómo hacer que funcione sin crear archivos de copia de seguridad?sed -i '' 's/o/X/g' foo.txtEsta 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.sh3)
sed 's/Error/NO_Error/g' test1.sh | tee test1.shfuente
-ela opción es para ejecutar múltiplessedcomandosconsiderar
file.txtcomoentonces O / P es
-ila opción guarda los cambios de forma permanente ...fuente