GNU/Linux >> Tutoriales Linux >  >> Linux

¿Leer y escribir en el mismo archivo en Linux sin sobrescribirlo?

Esta pregunta ya tiene respuestas aquí :Cerrado hace 9 años.

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

Frecuentemente me conecto a Amazon ec2 usando sus nombres DNS públicos
(ec2-12-34-56-78.compute-1.amazonaws.com ) y por eso mis known_hosts el archivo se abruma con una gran cantidad de ec2 entradas que nunca volveré a usar.

Sé que probablemente podría usar sed -i para editar en el lugar pero quería usar grep y entonces hice esto:

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

Eso 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 las cosas están bien, pero estoy confundido por qué leer y escribir en el mismo archivo lo deja en blanco, y si hay alguna forma de evitar esto cuando se usa grep , cat , etc.

Respuesta aceptada:

Hay una utilidad llamada sponge que es una parte de la suite moreutils. Fue hecho exactamente para este propósito.

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

Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Lea y escriba datos desde cualquier lugar con redirección en la terminal de Linux

  3. Mover archivos en Linux sin mv

  4. portapapeles de linux leer/escribir en C

  5. SSH:cómo incluir el comando -t en el archivo ~/.ssh/config

Introducción al sistema de archivos de Linux

Consejos de Vim:lea y escriba archivos remotos con Vim en Linux

Salida a Stdout y al mismo tiempo Grep en un archivo?

El comando ln en Linux:crear enlaces blandos y duros

Cómo cambiar el puerto SSH predeterminado en Linux [de forma adecuada y segura]

¿Cuál es el comando para copiar, leer y eliminar archivos en Linux?