ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณใช้เครื่องหมายอัญประกาศ 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.)