ค้นหาและแทนที่ข้อความในเอกสารหลายรายการจากบรรทัดคำสั่ง

หากคุณพอใจกับบรรทัดคำสั่งและในสถานการณ์ที่คุณต้องการค้นหาและแทนที่คำวลี 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 Chocolate Factory" ด้วยคำว่า "The Wizard of Oz" ในกลุ่มไฟล์. txt ที่ขึ้นต้นด้วย "Films" ที่จัดเก็บอยู่ในเอกสาร ไดเรกทอรี:

perl -pi -w -e 's/The Chocolate Factory/The Wizard of Oz/g;' ~/Documents/Films*.txt

ค้นหาและแทนที่จะทำทันที คุณสามารถตรวจสอบการเปลี่ยนแปลงได้โดยใช้ cat และ grep เพื่อตรวจสอบ:

cat ~/Documents/Films124.txt |grep "Wizard of Oz"

เป็นที่ยอมรับนี้เป็นขั้นสูงเป็นธรรมและใช่ชุดหาและแทนที่ผ่านเอกสารหลายสามารถทำได้ในรูปแบบที่เป็นมิตรกับผู้ใช้ผ่าน Apps GUI เช่น TextWrangler และ BBEdit แต่บางครั้งบรรทัดคำสั่งเป็นเพียงเร็วขึ้นสำหรับงานอย่างรวดเร็วเช่นนี้และอื่น ๆ ที่ มีลักษณะคล้ายกันบวกกับไม่ต้องมีการดาวน์โหลดเพิ่มเติมเพื่อใช้

thumbs ขึ้นใหญ่เพื่อ Lifehacker สำหรับเคล็ดลับที่ยอดเยี่ยม

Update : คำสั่ง 'sed' เป็นอีกหนึ่งวิธีในการค้นหาและแทนที่ด้วย command line ครอบคลุม sed ส่วนใหญ่เป็นหัวข้อสำหรับบทความอื่น แต่รูปแบบพื้นฐานของการใช้ sed สำหรับงานนี้เป็นบิตง่ายและทำให้ง่ายต่อการจดจำ:

sed -i 's/THIS/THAT/g' /path/to/files*.txt

ไม่มีทางถูกหรือผิดดังนั้นไม่ว่าคุณจะใช้ perl หรือ sed จะกลายเป็นเรื่องของความชอบส่วนบุคคล