ค้นหา & แทนที่ข้อความในเอกสารหลายฉบับจากบรรทัดคำสั่ง
หากคุณคุ้นเคยกับบรรทัดคำสั่งและเคยอยู่ในสถานการณ์ที่ต้องค้นหาและแทนที่คำ วลี URL หรืออักขระในกลุ่มของเอกสารข้อความหลายชุด Perl ทำงานได้ดีทีเดียว สตริงคำสั่งง่ายๆ จะทำการค้นหาและแทนที่ข้อความเป็นกลุ่มอย่างรวดเร็ว ไม่ว่าจะเป็นในเอกสารเดียวหรือขยายกลุ่มของเอกสารหลายชุด
เช่นเดียวกับหลาย ๆ อย่างในบรรทัดคำสั่ง ไม่มีกระบวนการยืนยัน ดังนั้นคุณจะต้องแน่ใจว่าได้ตั้งค่าไวยากรณ์ของคุณอย่างถูกต้องก่อนที่จะเริ่มคำสั่ง มิฉะนั้น คุณอาจต้องทำการค้นหาและแทนที่อีกครั้ง เพื่อแก้ไขการพิมพ์ผิด
ไวยากรณ์ของคำสั่งพื้นฐานมีดังนี้: perl -pi -w -e 's/THIS/THAT/g;' /path/to/files.txt
สำหรับ ตัวอย่างคำเดียว ถ้าคุณต้องการแทนที่อินสแตนซ์ทั้งหมดของ "ogre" ด้วย "cornbread" ในทุกไฟล์ .txt ภายในโฟลเดอร์ “Documents” ให้ใช้คำสั่งต่อไปนี้:
perl -pi -w -e 's/ogre/cornbread/g;' ~/Documents/.txt
สำหรับ ตัวอย่างการค้นหาและแทนที่ทั้งวลี สมมติว่าเราจะแทนที่ทั้งประโยค “โรงงานช็อกโกแลต ” กับ “The Wizard of Oz” ในกลุ่มของไฟล์ .txt ที่ขึ้นต้นด้วย “Films” ที่จัดเก็บไว้ในไดเรกทอรี Documents:
perl -pi -w -e 's/โรงงานช็อกโกแลต/พ่อมดแห่งออซ/g;' ~/Documents/Films.txt
หาและเปลี่ยนเสร็จทันที คุณสามารถตรวจสอบการเปลี่ยนแปลงอีกครั้งโดยใช้ cat และ grep เพื่อตรวจสอบ:
cat ~/Documents/Films124.txt |grep Wizard of Oz"
เป็นที่ยอมรับว่า นี่เป็นขั้นสูงพอสมควร และใช่ การค้นหาและแทนที่เป็นชุดผ่านเอกสารหลายชุดสามารถทำได้ในแบบที่เป็นมิตรกับผู้ใช้มากขึ้นผ่านแอพ GUI เช่น TextWrangler และ BBEdit แต่บางครั้งบรรทัดคำสั่งก็เร็วกว่า สำหรับงานด่วนเช่นนี้และอื่นๆ ที่คล้ายกัน แถมยังไม่ต้องดาวน์โหลดเพิ่มเติมเพื่อใช้งาน
ยกนิ้วให้ Lifehacker สำหรับเคล็ดลับที่ยอดเยี่ยม
Update: คำสั่ง 'sed' เป็นอีกวิธีหนึ่งในการค้นหาและแทนที่อย่างรวดเร็วผ่านบรรทัดคำสั่ง การครอบคลุม sed ส่วนใหญ่เป็นหัวข้อสำหรับบทความอื่น แต่ไวยากรณ์พื้นฐานของการใช้ sed สำหรับงานนี้ค่อนข้างเรียบง่ายกว่าและทำให้จำได้ง่ายขึ้น:
sed -i 's/THIS/THAT/g' /path/to/files.txt
ไม่มีวิธีใดถูกหรือผิด ดังนั้นไม่ว่าคุณจะใช้ perl หรือ sed ก็ขึ้นอยู่กับความชอบส่วนตัว