
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_hosts
Datei mit vielen ec2
Einträ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 grep
und habe daher Folgendes gemacht:
grep -v ec2 ~/.ssh/known_hosts > ~/.ssh/known_hosts
Das Ergebnis known_hosts
ist 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, sponge
das 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 grep
sie die Möglichkeit erhält, sie zu lesen. Wenn Sie eine Shell-Umleitung verwenden, können Sie dies nicht umgehen.