2016-07-23 12 views
2

Ich arbeite an einem Bash-Skript und läuft in ein Problem mit sed die Datei, die ich benutze, um es leer zu leeren.sed überschreiben Datei leer lassen

Hier ist die Blöcke, die die Datei und die Funktion definieren, die ich die Datei zu bereinigen erstellt:

# Define Review Log file 
reviewlog=/home/serverreview-$(date +%d%^b%y).txt 
# Bleachs the Review Log of the color customization 
bleach() 
{ 
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" $reviewlog >> $reviewlog 
} 

die Verwendung >> es die Informationen zum Ende der Datei anhängen tut wie es soll . Allerdings, wenn ich benutze:

bleach() 
{ 
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" $reviewlog > $reviewlog 
} 

Er verlässt die Ausgabedatei völlig leer

+0

unten ist korrekt. Eliminiere jetzt eine weitere ganze Klasse von Fehlern aus deinem Shell-Scripting, indem du immer Variablenverweise dbl-zitierst, d. H. '" $ Reviewing "' (mit Ausnahme einiger weniger fortgeschrittener Fälle), wenn du 'set-$ @' zum Beispiel verwendest. Gute Präsentation Ihres Q, posten Sie weiter. Viel Glück für jeden. – shellter

Antwort

1

Dies ist normal, da sed liest, wie sie schreibt. Der erste Schreibvorgang wird die Datei abschneiden. Dies beendet das Lesen und hinterlässt eine leere Datei.

In einigen Bedingungen, wenn ein Werkzeug einen Puffer vor dem Schreiben liest, würde es für kleine Eingaben funktionieren. Aber das ist nichts, auf das du dich nicht verlassen willst. Wenn das Werkzeug also keine In-Place Überschreiboption hat, verwenden Sie es nicht.

Sie können in ein temporäres Ausgabedatei schreiben und es über die Infile umbenennen oder die In-Datei umbenennen (oder öffnen Sie die In-Datei, dann löschen Sie) und dann an den erwarteten Speicherort schreiben. Andernfalls müssen Sie sicherstellen, dass alles in den Speicher eingelesen wird.

sed -i mit und ohne Erweiterung funktioniert gleich. Siehe zum Beispiel https://robots.thoughtbot.com/sed-102-replace-in-place, die die -i Variationen beschreibt.

+0

Vielen Dank für die Erklärung. Das hat es perfekt gemacht! –