Trước hết, hãy đảm bảo bạn đang sử dụng các trích dẫn ascii thông thường như "và '(mã ascii 0x22và 0x27, tương ứng) trong các tập lệnh shell, vì ví dụ trong bài đăng của bạn chứa các ký tự trích dẫn không chuẩn. Nếu bạn nhìn kỹ, chúng có vẻ hơi khác. Rất có thể đây là lỗi sao chép-dán từ định dạng tài liệu văn bản phong phú như Word, OOWriter hoặc thậm chí là cửa sổ trình duyệt.
Vì bạn đang sử dụng máy Mac, rất có thể bạn có triển khai FreeBSD sed, trong trường hợp đó bạn phải viết lệnh theo cách này:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(ở đây sử dụng +thay vì \;để tránh chạy một sedlời gọi cho mỗi tệp).
Trong việc thực hiện FreeBSD của sedcác -ilá cờ cần một cuộc tranh cãi: phần mở rộng của một tập tin sao lưu. Ví dụ với -i .baklệnh sẽ sao lưu file1.txtnhư file1.txt.baktrước khi thực hiện thay thế trong tệp gốc. Sử dụng một đối số trống ''có nghĩa là không sử dụng tệp sao lưu, dường như là những gì bạn muốn.
Điều tương tự trong triển khai GNU (hoặc NetBSD, OpenBSD, busybox) sẽ là:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Cảm ơn bạn @bahamat và @Mikel và @ pieter-Breed đã cải thiện câu trả lời của tôi với ý kiến của bạn.
-execvà tất cả mọi thứ sau nó? Nó có in tên của các tệp Java không? (Tôi lo lắng rằng bạn đang sử dụng dấu ngoặc kép thông minh thay vì dấu ngoặc kép ASCII.)