
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_hosts
archivo se satura con muchas ec2
entradas que nunca volveré a usar.
Sé que probablemente me vendría bien sed -i
editar en el lugar, pero quería usarlo grep
y entonces hice esto:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts
Eso lo deja known_hosts
como 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
, cat
etc.
Respuesta1
Hay una utilidad llamada sponge
que 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 grep
tener la oportunidad de leerlo. No hay forma de evitar esto si utiliza la redirección de shell.