2012-03-27 13 views
3

ich sed bin mit zwei Zeichenfolgen in einer Datei in bash suchen und ersetzen (GNU sed)Warum sed ersetzen + Umleitung löscht meine Datei?

Dies ist die Datei nach

-rw-r--r-- 1 websync www-data 4156 mar 27 12:56 /home/websync/tmp/sitio-oficial/sitios/wp-config.php 

hier wird der Befehl I

laufen
sed 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php > /home/websync/tmp/sitio-oficial/sitios/wp-config.php 

und das Ergebnis

-rw-r--r-- 1 websync www-data 0 mar 27 13:05 /home/websync/tmp/sitio-oficial/sitios/wp-config.php 

EDIT: Wenn ich seds Ausgabe nicht umleitung, dann habe ich die richtige Ausgabe. Wenn ich auf eine neue Datei umleitung, funktioniert alles ok.

Antwort

13

Das ist normal. Sie können in einer Pipeline wie dieser nicht in dieselbe Datei lesen und schreiben. (Dies wird mit anderen Dienstprogrammen als sed fehlschlagen).

Verwenden Sie die in-place flag -i statt:

sed -i 's/www-test/www/g' /home/websync/tmp/sitio-oficial/sitios/wp-config.php 
+0

für den Hinweis auf akzeptiert, dass ** dies mit anderen scheitern Dienstprogramme ** – jperelli

+0

@jperelli Sie müssen eher akzeptieren als upvote :-) – brice

+0

Ja, ich warte 5 Minuten, nach Stackoverflow. Vielen Dank! – jperelli

3

sed liest Ihre Dateien als Stream ein und gibt auch einen Stream aus. Sobald Sie die Umleitung in Ihre Datei durchführen, werden die Inhalte überschrieben und da diese Datei als Stream gelesen wird, wurde sie noch nicht einmal von sed gelesen. Wenn sed die Datei liest, ist sie leer und endet sofort ohne Ausgabe.

Verwenden -i, ein direktes bearbeiten zu tun, statt:

sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php 
2

Die Umleitung öffnet die Datei für die Ausgabe, Kürzen es. Dies geschieht gleichzeitig mit sed Öffnen zum Lesen, so sed sieht die abgeschnittene Version. Sie sollten Ihre Ausgabe in eine andere Datei umleiten Ihre Eingabe zu vermeiden clobbering oder sed ‚s in-Place-Editiermodus anstelle Umleitung der Verwendung:

sed 's/www-test/www/g' -i /home/websync/tmp/sitio-oficial/sitios/wp-config.php