GNU/Linux >> Tutoriels Linux >  >> Linux

Lire et écrire dans le même fichier sous Linux sans l'écraser ??

Cette question a déjà des réponses ici :Fermé il y a 9 ans.

Duplication possible :
Comment puis-je faire en sorte que iconv remplace le fichier d'entrée par la sortie convertie ?

Je me connecte fréquemment à amazon ec2 en utilisant leurs noms DNS publics
(ec2-12-34-56-78.compute-1.amazonaws.com ) et à cause de cela mes known_hosts le fichier est submergé par beaucoup de ec2 entrées que je n'utiliserai plus jamais.

Je sais que je pourrais probablement utiliser sed -i pour éditer sur place mais je voulais utiliser grep et j'ai donc fait ceci :

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

Cela laisse known_hosts comme un fichier vide. Si je le fais :

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

alors tout va bien, mais je ne comprends pas pourquoi lire et écrire dans le même fichier le laisse vide, et s'il existe un moyen de contourner cela lors de l'utilisation de grep , cat , etc.

Réponse acceptée :

Il existe un utilitaire appelé sponge qui fait partie de la suite moreutils. Il a été conçu dans ce but précis.

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

Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Lire et écrire des données de n'importe où avec la redirection dans le terminal Linux

  3. Déplacer des fichiers sur Linux sans mv

  4. Sortie vers Stdout et en même temps Grep dans un fichier ?

  5. Autorisations de fichiers sous Linux – Lecture/Écriture/Exécution

Introduction au système de fichiers Linux

Conseils Vim - Lire et écrire des fichiers distants avec Vim sous Linux

La commande ln sous Linux :créer des liens logiciels et matériels

Comment changer le port SSH par défaut sous Linux [correctement et en toute sécurité]

SSH - Comment inclure la commande -t dans le fichier ~/.ssh/config

Linux :Comment utiliser un fichier en entrée et en sortie en même temps ?