Kann ich in Linux dieselbe Datei lesen und beschreiben, ohne sie zu überschreiben?

Kann ich in Linux dieselbe Datei lesen und beschreiben, ohne sie zu überschreiben?

Mögliches Duplikat:
Wie kann ich iconv dazu bringen, die Eingabedatei durch die konvertierte Ausgabe zu ersetzen?

Ich verbinde mich häufig mit Amazon EC2 unter Verwendung der öffentlichen DNS-Namen
( ec2-12-34-56-78.compute-1.amazonaws.com), wodurch meine known_hostsDatei mit vielen ec2Einträgen überlastet wird, die ich nie wieder verwenden werde.

Ich weiß, dass ich wahrscheinlich die Bearbeitung an Ort und Stelle verwenden könnte sed -i, aber ich wollte verwenden grepund habe daher Folgendes gemacht:

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

Das Ergebnis known_hostsist eine leere Datei. Wenn ich das mache:

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

dann ist alles in Ordnung, aber ich bin verwirrt, warum beim Lesen und Schreiben in dieselbe Datei diese leer bleibt und ob es beim Verwenden von grep, cat, usw. eine Möglichkeit gibt, dies zu umgehen.

Antwort1

Es gibt ein Dienstprogramm namens, spongedas Teil desmehrutilsSuite. Es wurde genau für diesen Zweck gemacht.

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

Antwort2

Umleitungen werden von der Shell ausgeführt, bevor der Befehl ausgeführt wird. Das bedeutet, dass die Shell angewiesen wird, die Datei zu kürzen, bevor grepsie die Möglichkeit erhält, sie zu lesen. Wenn Sie eine Shell-Umleitung verwenden, können Sie dies nicht umgehen.

verwandte Informationen