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 0x22
và 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 sed
lời gọi cho mỗi tệp).
Trong việc thực hiện FreeBSD của sed
các -i
lá 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 .bak
lệnh sẽ sao lưu file1.txt
như file1.txt.bak
trướ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.
-exec
và 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.)