หน้าเว็บ

วันพฤหัสบดีที่ 4 ธันวาคม พ.ศ. 2551

วิธีการ replace string ในหลายๆไฟล์ บน Linux

จริงๆแล้ววิธีการ replace string บน linux ทำได้หลายวิธี ขอลองนำเสนอ 2 วิธีด้วยกัน

วิธีแรก
ใช้ grep + perl
$ grep -rl OLDSTRING . | xargs perl -pi -e ’s/OLDSTRING/NEWSTRING/g’
วิธีที่สอง ใช้ grep + sed
$ grep -rl OLDSTRING . | xargs sed -e ’s/OLDSTRING/NEWSTRING/g’
อธิบาย
คำสั่ง grep จะช่วยเลือกไฟล์ที่มี OLDSTRING ประกอบอยู่โดยเริ่มตั้งแต่ current directory (.) เป็นต้นไป ซึ่งถ้าต้องการให้เริ่มที่ directory อื่นก็สามารถเปลี่ยน . เป็นรูปแบบอื่นได้

ส่วน option -r หมายถึงให้ recursive ทุกไฟล์และโฟลเดอร์
optoin -l หมายถึงเลือกเฉพาะไฟล์ที่มี OLDSTRING อยู่

ส่วน option ใน perl มีความหมายดังนี้
-e ที่อยู่ท้ายสุดคือ script ที่เราจะทำงาน นั่นคือคำสั่ง replace string global จาก OLDSTRING ให้เป็น NEWSTRING
-p คือให้ลูป script ด้วย
while (<>) {
# your script goes here
} continue {
print or die "-p destination: $!\n";
}
-i คือให้แทน <> ในลูปด้วยไฟล์ที่รับเข้ามา ซึ่งก็คือไฟล์ทั้งหมดที่รับมาจาก grep นั่นเอง

ส่วน xargs จะทำให้ perl รับอาร์กิวเมนต์ได้ไม่จำกัด คือ สามารถรองรับไฟล์จำนวนมากจาก grep ที่ส่งมาเป็นอาร์กิวเมนต์

ส่วนคำสั่ง sed นั้นเป็น stream editor ที่จะทำการ run คำสั่งที่ระบุไปยัง stream ของไฟล์ที่ส่งเข้ามาจาก grep
option -e คือ คือรับ expression script ที่จะกระทำกับ input ที่รับเข้ามา

ระบบที่ทดสอบ
OS: CentOS 5

ไม่มีความคิดเห็น: