ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณใช้เครื่องหมายอัญประกาศ ASCII ปกติเช่น"และ'(รหัส ASCII 0x22และ0x27ตามลำดับ) ในเชลล์สคริปต์เนื่องจากตัวอย่างในโพสต์ของคุณมีอักขระเครื่องหมายคำพูดที่ไม่ได้มาตรฐาน หากคุณมองอย่างใกล้ชิดพวกเขาดูเหมือนแตกต่างกันเล็กน้อย ส่วนใหญ่อาจเป็นข้อผิดพลาดการคัดลอกวางจากรูปแบบเอกสาร Rich Text เช่น 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-breedสำหรับการปรับปรุงคำตอบของฉันด้วยความคิดเห็นของคุณ
-execและทุกสิ่งหลังจากนั้น มันพิมพ์ชื่อของไฟล์ Java หรือไม่? (ฉันกังวลว่าคุณกำลังใช้คำพูดที่สมาร์ทแทนคำพูด ASCII.)