Vor allem, stellen Sie sicher sind Sie regelmäßig ascii - Angebote wie mit "
und '
(ASCII - Codes 0x22
und 0x27
jeweils) in Shell - Skripten, weil das Beispiel in Ihrem Beitrag enthält Nicht-Standard - Anführungszeichen. Wenn Sie genau hinsehen, sehen sie etwas anders aus. Höchstwahrscheinlich handelt es sich um einen Fehler beim Kopieren und Einfügen aus einem Rich-Text-Dokumentformat wie Word, OOWriter oder sogar einem Browserfenster.
Da Sie auf einem Mac arbeiten, haben Sie höchstwahrscheinlich die FreeBSD-Implementierung von sed
. In diesem Fall müssen Sie den Befehl folgendermaßen schreiben:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(hier mit +
anstelle von \;
, um einen sed
Aufruf pro Datei zu vermeiden ).
In der FreeBSD-Implementierung benötigt sed
das -i
Flag ein Argument: die Erweiterung einer Sicherungsdatei. Zum Beispiel würde mit -i .bak
dem Befehl file1.txt
als file1.txt.bak
erstes eine Sicherung durchgeführt, bevor der Ersatz in der Originaldatei durchgeführt wird. Wenn Sie ein leeres Argument verwenden ''
, müssen Sie keine Sicherungsdatei verwenden. Dies scheint genau das zu sein, was Sie möchten.
Das gleiche in der GNU (oder NetBSD, OpenBSD, busybox) -Implementierung wäre:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Vielen Dank an @bahamat und @Mikel und @ pieter-breed für die Verbesserung meiner Antwort mit Ihren Kommentaren.
-exec
und alles danach entfernen ? Gibt es die Namen der Java-Dateien aus? (Ich mache mir Sorgen, dass Sie intelligente Anführungszeichen anstelle von ASCII-Anführungszeichen verwenden.)