2013-10-18 9 views
102

gezwungen, CVS für einen aktuellen Client zu verwenden und die Adresse für den Remote-Repo geändert. Die einzige Möglichkeit, die entfernte Adresse in meinem lokalen Code zu ändern, ist eine rekursive Suche und Ersetzung.Ungültiger Befehlscode., Trotz Umgehungszeiträume, Verwendung von sed

jedoch mit dem Befehl sed würde ich arbeiten erwarten:

find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;

ich für jede Datei eine Fehlermeldung erhalten:

sed: 1: ".//file/path ...": invalid command code .

Ich habe versucht, die zu entkommen Perioden in der sed passen/ersetzen, aber das löst nichts.

Antwort

249

zu vermeiden Wenn Sie auf einem OS X sind, ist dies wahrscheinlich hat nichts mit dem Befehl sed zu tun. In der OSX-Version von sed erwartet die Option -i ein -Argument, sodass Ihr Befehl tatsächlich als extension-Argument analysiert wird und der Dateipfad als Befehlscode interpretiert wird.

Versuchen Hinzufügen des -e Argument ausdrücklich und geben '' als Argument -i:

find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \; 

this See.

+1

Der Beispielbefehl, den Sie geben, gibt jedoch: sed: RE Fehler: ungültige Bytefolge – helion3

+0

Das ist wahrscheinlich ein Copy-Paste-Codierungsproblem, da es in meinen Tests ohne Probleme funktioniert. Siehe [dies] (http://stackoverflow.com/questions/11287564/getting-sed-error-illegal-byte-sequence-in-bash) – damienfrancois

+14

Wenn Sie 10 Minuten verbracht haben, wie ich den Unterschied gefunden habe, ist es -e Option – acheron55

0

Wahrscheinlich enthält Ihre neue Domain /? Falls ja, versuchen Sie, einen anderen Separator als / in sed zu verwenden, z. #, , usw.

find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \; 

Es wäre auch als doppelte Anführungszeichen eher zu umschließen s/// in Apostroph gut Variablensubstitution oder andere unerwartetes Verhalten

26

Sie haben einfach vergessen, ein Argument an -i zu liefern. Ändern Sie einfach -i zu -i ''.

Natürlich bedeutet dies, dass Sie nicht möchten, dass Ihre Dateien gesichert werden; Geben Sie andernfalls die Erweiterung Ihrer Wahl an, z. B. -i .bak.

Verwandte Themen