¿Puedo leer y escribir en el mismo archivo en Linux sin sobrescribirlo?

¿Puedo leer y escribir en el mismo archivo en Linux sin sobrescribirlo?

Posible duplicado:
¿Cómo puedo hacer que iconv reemplace el archivo de entrada con la salida convertida?

Con frecuencia me conecto a amazon ec2 usando sus nombres DNS públicos
( ec2-12-34-56-78.compute-1.amazonaws.com) y debido a esto mi known_hostsarchivo se satura con muchas ec2entradas que nunca volveré a usar.

Sé que probablemente me vendría bien sed -ieditar en el lugar, pero quería usarlo grepy entonces hice esto:

grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts

Eso lo deja known_hostscomo un archivo vacío. Si lo hago:

grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/tmp
mv ~/.ssh/tmp ~/.ssh/known_hosts

entonces todo está bien, pero no estoy seguro de por qué leer y escribir en el mismo archivo lo deja en blanco y si hay alguna forma de evitarlo cuando se usa grep, catetc.

Respuesta1

Hay una utilidad llamada spongeque es parte delmásutilssuite. Fue hecho exactamente para este propósito.

grep -v ec2 ~/.ssh/known_hosts | sponge ~/.ssh/known_hosts

Respuesta2

Las redirecciones las realiza el shell, antes de que se ejecute el comando. Esto significa que se le indica al shell que trunque el archivo antes de greptener la oportunidad de leerlo. No hay forma de evitar esto si utiliza la redirección de shell.

información relacionada