วันเสาร์ที่ 1 มีนาคม พ.ศ. 2551

sed - stream editor (2)

ต่อเลยดีกว่า เพื่อไม่ให้บทความมันยาวเกินไป เลยจะตัดๆเป็นช่วงๆไป
ต่อจากนี้จะลอง test ว่ามันทำงานอะไรได้บ้าง

1. Substitue - อันนี้เป็น function หลักเลยที่เราใช้อยู่ (ตอนนี้ใช้เป็นอยู่อย่างเดียว)
sed -e 's/line/section/g' test.txt
sed 's/line/section/' test.txt
sed 's/line/section/g' test.txt

สามตัวอย่างนี้ให้ผลลัพธ์เหมือนกันเลยอ่ะ ก็คือจะเปลี่ยนข้อมูลทั้งไฟล์ โดยเปลี่ยนข้อความ 'line' ให้เป็น 'section'

sed 's/line/section/g' test.txt > result.txt

ตัวอย่างสุดท้าย จะบอกว่า ถ้าไม่ระบุ output file - SED จะส่งผลลัพธ์ออกไปยัง STDOUT ซึ่งก็คือจอภาพ ถ้าระบุไว้มันก็จะ SAVE เข้า output file ซึ่งผลก็คือเราจะได้ file ใหม่ที่ผ่านการแก้ไขแล้ว โดยไม่ไปกวนกับไฟล์ต้นฉบับ
(ซึ่งก็ดี เพราะเกิดพลาดอะไรไป ก็จะได้ไม่ต้องเศร้ามากนัก)

sed 's/line/section/g' < test.txt > result.txt

ลองเช็ค syntax ของ SED
s/regexp/replacement/flags

นี่คือคำสั่งที่ใช้ในการทำ substitute
s แรกคือ s command - substitute command
regexp - ข้อความที่จะถูกแทนที่ - สามารถใช้เป็น Regular Expression ได้ด้วย (RegExp นี่เอาไว้จะเอามาเขียนด้วยดีกว่า เพราะใช้ประโยชน์ได้เยอะ)
replacement - ข้อความที่จะเอาไปแทนที่ - อันนี้ใช้ RegExp ไม่ได้อยู่แล้ว
flags - จะมีหรือไม่มีก็ได้

flags สำหรับ substitute
g - แทนทุกๆ RegExp ด้วย Replacement - แทนทุกอัน ทุกตำแหน่ง

บางครั้งคำสั่งบางตัวใน sed อาจทำให้เกิดความสับสน(มั้ง) ดังนั้นทางที่ดี ควรใส่ quote คร่อมเอาไว้ อย่างน้อยเพื่อความสบายใจ

เช่น
sed s/line/section/g testfile.txt
sed 's/line/section/g' testfile.txt
ทั้งสองตัว(ตอนนี้)ให้ผลเหมือนกัน แต่แบบมี quote ชัวร์กว่าว่าจะไม่ error

ยังมีอีก แต่แปะไว้ก่อนนา...

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