Прежде всего, убедитесь, что вы используете обычные кавычки ascii, такие как "
и '
(коды ascii 0x22
и 0x27
, соответственно), в сценариях оболочки, потому что пример в вашем посте содержит нестандартные символы кавычек. Если вы посмотрите внимательно, они выглядят немного по-другому. Скорее всего, это ошибка копирования-вставки из форматированного текстового документа, такого как Word, OOWriter или даже из окна браузера.
Поскольку вы работаете на Mac, скорее всего, у вас есть реализация FreeBSD sed
, и в этом случае вы должны написать команду следующим образом:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(здесь используется +
вместо того, \;
чтобы не запускать один sed
вызов на файл).
В реализации FreeBSD для sed
этого -i
флага необходим аргумент: расширение файла резервной копии. Например, с помощью -i .bak
этой команды выполняется резервное копирование file1.txt
в file1.txt.bak
первую очередь перед выполнением замены в исходном файле. Использование пустого аргумента ''
означает не использовать файл резервной копии, который, кажется, то, что вы хотите.
То же самое в реализации GNU (или NetBSD, OpenBSD, busybox) будет:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Спасибо @bahamat и @Mikel и @ Pieter-порода для улучшения моего ответа с вашими комментариями.
-exec
все и после него? Распечатывает ли имена файлов Java? (Я беспокоюсь, что вы используете умные кавычки вместо кавычек ASCII.)