ด้วยความช่วยเหลือของ GNU:
find . -type f -print0 | xargs -0 sed -i /KeyWord/d
ด้วย OSX sed:
find . -type f -print0 | xargs -0 sed -i '' /KeyWord/d
คำสั่งแรกfind
ค้นหาไฟล์มาตรฐานทั้งหมด (ไม่ใช่ไดเร็กทอรีหรือไพพ์หรืออื่น ๆ ) พิมพ์โดยคั่นด้วย\0
(ดังนั้นชื่อไฟล์สามารถมีช่องว่างบรรทัดใหม่ ฯลฯ )
คำสั่งที่สองxargs
อ่านเอาต์พุตของfind
, คว้ารายการตามตัวคั่น ( \0
เนื่องจาก-0
), เรียกใช้sed -i [...]
ด้วยพารามิเตอร์ที่เพิ่มจากรายการ ( sed
จะถูกเรียกหลายครั้งถ้ามีไฟล์จำนวนมากเนื่องจากความยาวสูงสุดของพารามิเตอร์ถูก จำกัด แต่ละคำขอร้อง)
sed
ปรับเปลี่ยนคำสั่งในสถานที่ ( -i
)
ในฐานะที่เป็นมันจะลบบรรทัดที่มีการแสดงออกปกติ/KeyWord/d
KeyWord
คุณควรเรียนรู้ที่sed
จะเข้าใจไวยากรณ์ (เรียบง่าย แต่ผิดปกติ) และอ้างอิงไปยัง manpages ที่เหมาะสมสำหรับข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือที่เกี่ยวข้องที่นี่
และในขณะที่ฉันต้องการส่งเสริมzsh
วิธีการแก้ปัญหาด้วย globs ขยายของมัน:
sed -i /KeyWord/d **/*(.)