Pertama-tama, pastikan Anda menggunakan tanda kutip ascii biasa seperti "
dan '
(kode ascii 0x22
dan 0x27
, masing-masing) dalam skrip shell, karena contoh dalam posting Anda berisi karakter kutipan non-standar. Jika Anda perhatikan lebih dekat, mereka terlihat sedikit berbeda. Kemungkinan besar ini adalah kesalahan salin-tempel dari format dokumen teks kaya seperti Word, OOWriter, atau bahkan jendela browser.
Karena Anda menggunakan Mac, kemungkinan besar Anda memiliki implementasi FreeBSD sed
, dalam hal ini Anda harus menulis perintah dengan cara ini:
find . -name "*.java" -exec sed -i '' s/foo/bar/g {} +
(Di sini menggunakan +
alih-alih \;
menghindari menjalankan satu sed
doa per file).
Dalam pelaksanaan FreeBSD dari sed
para -i
bendera kebutuhan argumen: ekstensi dari file cadangan. Misalnya dengan -i .bak
perintah akan backup file1.txt
sebagai file1.txt.bak
pertama sebelum melakukan penggantian di file asli. Menggunakan argumen kosong ''
berarti tidak menggunakan file cadangan, yang tampaknya seperti yang Anda inginkan.
Hal yang sama dalam implementasi GNU (atau NetBSD, OpenBSD, busybox) adalah:
find . -name "*.java" -exec sed -i s/foo/bar/g {} +
Terima kasih @bahamat dan @Mikel dan @ pieter-breed untuk meningkatkan jawaban saya dengan komentar Anda.
-exec
dan semuanya setelah itu? Apakah itu mencetak nama file Java? (Saya khawatir Anda menggunakan kutipan pintar dan bukan kutipan ASCII.)