Vor allem, stellen Sie sicher sind Sie regelmäßig ascii - Angebote wie mit "und '(ASCII - Codes 0x22und 0x27jeweils) 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 sedAufruf pro Datei zu vermeiden ).
In der FreeBSD-Implementierung benötigt seddas -iFlag ein Argument: die Erweiterung einer Sicherungsdatei. Zum Beispiel würde mit -i .bakdem Befehl file1.txtals file1.txt.bakerstes 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.
-execund 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.)