Advertencia: este es un método peligroso! Abusa de los búferes de E / S en Linux y con opciones específicas de almacenamiento en búfer se las arregla para trabajar en archivos pequeños. Es una curiosidad interesante. ¡Pero no lo use para una situación real!
Además de la -i
opción de sed
usted puede usar la tee
utilidad .
De man
:
tee: lea desde la entrada estándar y escriba en la salida y archivos estándar
Entonces, la solución sería:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee | tee index.html
- aquí tee
se repite para asegurarse de que la tubería esté almacenada. Luego, todos los comandos en la tubería se bloquean hasta que obtienen alguna entrada para trabajar. Cada comando en la tubería comienza cuando los comandos aguas arriba han escrito 1 búfer de bytes (el tamaño se define en alguna parte ) en la entrada del comando. Entonces el último comandotee index.html
, que abre el archivo para escribir y, por lo tanto, lo vacía, se ejecuta después de que la tubería ascendente ha finalizado y la salida está en el búfer dentro de la tubería.
Lo más probable es que lo siguiente no funcione:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee index.html
- ejecutará ambos comandos de la tubería al mismo tiempo sin ningún bloqueo. (Sin el bloqueo de la tubería debe pasar la línea de bytes por línea en lugar de tampón de memoria intermedia. Igual que cuando se ejecuta cat | sed s/bar/GGG/
. Sin bloqueo es más interactiva y por lo general las tuberías de sólo 2 comandos ejecutar sin memoria intermedia y el bloqueo. Oleoductos más largos se almacenan temporalmente.) La tee index.html
voluntad abra el archivo para escribir y se vaciará. Sin embargo, si activa el almacenamiento en búfer siempre, la segunda versión también funcionará.
perl -pi -w -e 's/STRING_TO_REPLACE/REPLACE_WITH/g;' index.html