Przede wszystkim upewnij się, że używasz regularnych cytatów ascii, takich jak "
i '
(odpowiednio kody ascii 0x22
i 0x27
) w skryptach powłoki, ponieważ przykład w twoim poście zawiera niestandardowe znaki cytowania. Jeśli przyjrzysz się uważnie, wyglądają nieco inaczej. Najprawdopodobniej jest to błąd kopiowania i wklejania z formatu dokumentu tekstu sformatowanego, takiego jak Word, OOWriter, a nawet okno przeglądarki.
Ponieważ jesteś na komputerze Mac, najprawdopodobniej masz implementację FreeBSD sed
, w którym to przypadku musisz napisać polecenie w ten sposób:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(tutaj, +
zamiast używać \;
jednego sed
wywołania na plik).
W realizacji FreeBSD z sed
tej -i
flagi potrzebuje argument: rozszerzenie pliku kopii zapasowej. Na przykład za -i .bak
pomocą polecenia utworzono kopię zapasową file1.txt
jako file1.txt.bak
pierwszą przed wykonaniem zamiany w oryginalnym pliku. Użycie pustego argumentu ''
oznacza nieużywanie pliku kopii zapasowej, który wydaje się być tym, czego chcesz.
To samo w implementacji GNU (lub NetBSD, OpenBSD, busybox) to:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Dziękuję @bahamat i @Mikel i @ pieter-breed za ulepszenie mojej odpowiedzi w twoich komentarzach.
-exec
i wszystko po nim? Czy drukuje nazwy plików Java? (Martwię się, że używasz inteligentnych cytatów zamiast cytatów ASCII.)