2010-08-26 6 views
22

Ich verwende den folgenden sed Befehl in UNIX Solarissed -i +, was die gleiche Option in SOLARIS

Von SOLARIS Maschine

sed -i '$ s/OLD/NEW/g' test   
sed: illegal option -- i 

kann jemand haben Ahnung, was die illegale Option in Solaris (anstelle Option "-i" in linux muss ich andere Option in Solaris mit dem gleichen Effekt)

lidia

Antwort

17

Sie werden Verhalten replizieren müssen -i ‚s sich durch Speichern der Ergebnisse in einer temporären Datei und Ersetzen der ursprünglichen Datei durch die temporäre Datei. Dies mag unelegant erscheinen, aber das ist alles sed -i tut unter die Decke.

sed '$ s/OLD/NEW/g' test > test.tmp && mv test.tmp test 

Wenn Sie kümmern Sie es mithilfe mktemp etwas robuster machen könnte:

TMP=$(mktemp test.XXXXXX) 
sed '$ s/OLD/NEW/g' test > "$TMP" && mv "$TMP" test 
+0

vielleicht andere Option aus awk Ich kann nicht die Datei in anderer Datei – lidia

+0

Jeden Befehl verschieben, die eine Datei „in place“ ändert tun eigentlich diesem Make-copy-Bewe- Kopieren mischen. Abgesehen von bestimmten Sonderfällen können Sie eine Datei nicht an Ort und Stelle ändern. Wenn 'mv' nicht funktioniert, wird' cp' vielleicht funktionieren. –

+1

Ihr Befehl ändert auch die Berechtigungen der geänderten Datei. 'sed -i' wird das nicht tun. Es könnte besser sein, 'cat' und' rm' anstelle von 'mv' zu verwenden:' && cat "$ TMP"> test && rm "$ TMP" '. – ceving

20

Es ist nicht genau das gleiche wie sed -i, aber ich hatte ein ähnliches Problem. Sie können dies mit Perl tun:

perl -pi -e 's/find/replace/g' file 

das Kopieren/Verschieben funktioniert nur für einzelne Dateien. Wenn Sie einen Text für jede Datei in einem Verzeichnis und in Unterverzeichnissen ersetzen möchten, benötigen Sie etwas, das es an Ort und Stelle tut. Sie können dies mit Perl tun und finden:

find . -exec perl -pi -e 's/find/replace/g' '{}' \; 
+0

Bester Drop-In-Ersatz. Vielen Dank. – woot