เปลี่ยนแปลงข้อความที่ต้องการใน vim

นอกจากเปลี่ยนแปลงข้อความที่ต้องการด้วย sed แล้ว ใน vim ก็สามารถทำได้เหมือนกัน รูปแบบการใช้ก็ใกล้เคียงกัน  ลองมาดูวิธีการใช้คำสั่งใน vim เพื่อเปลี่ยนแปลงข้อความกัน

ใช้ตัวอย่างไฟล์ reports เดียวกัน

$ vi reports.txt
id;name;score;remark
1;alice;89;good
2;bob;73;well done
3;chris;92;very good
4;dan;100;excellent
5;eric;80;good

รูปแบบในการเปลี่ยนจะเหมือนกับคำสั่ง sed คือ

's/REGEXP/REPLACEMENT/FLAGS'

แต่วิธีการเรียกใช้แตกต่างกัน

ใน vi จะมีโหมดหนึ่งที่เรียกว่าโหมด ex ไว้สำหรับสั่งให้ vi ทำงานบางอย่าง เช่น :q จะเป็นการออกจาก vi

ในที่นี้เราจะสั่งให้ vi เปลี่ยนแปลงข้อความ (substitute) โดยใช้ :s

ตัวอย่างการพิมพ์คำสั่ง :s/;/,/ สังเกตด้านล่างจะขึ้นคำสั่งที่พิมพ์ลงไป
c-v01-a

แล้วกดปุ่ม [Enter] เพื่อรันคำสั่ง
c-v01-b

ผลลัพธ์ที่ได้จะเป็นการเปลี่ยนข้อความจาก ; ไปเป็น , แต่คำสั่งนี้จะเปลี่ยนเฉพาะบรรทัดปัจจุบันที่เคอร์เซอร์อยู่เท่านั้น ในตัวอย่างนี้คือบรรทัดแรก

หมายเหตุ ใน vi สามารถกดปุ่ม u เพื่อ undo หรือยกเลิกการเปลี่ยนแปลงครั้งล่าสุดได้

หากต้องการเปลี่ยนทุกบรรทัดต้องใช้เครื่องหมาย %  นำหน้า s

ตัวอย่างการพิมพ์คำสั่ง :%s/;/,/ สังเกตด้านล่างจะขึ้นคำสั่งที่พิมพ์ลงไป
c-v02-a

ผลลัพธ์หลังการกดปุ่ม [Enter] เพื่อรันคำสั่ง
c-v02-b

ผลลัพธ์ที่ได้จะเป็นการเปลี่ยนแปลงข้อความจาก ; ไปเป็น , ทุกบรรทัดแล้ว แต่จะเปลี่ยนเฉพาะ ; ที่เจอตัวแรกในแต่ละบรรทัด

เช่นเดียวกับ sed หากต้องการเปลี่ยนทุกตัวอักษรในแต่ละบรรทัด ให้ระบุ FLAGS ‘g’ ต่อท้ายคำสั่ง

ตัวอย่างการใช้คำสั่ง :%s/;/,/g
c-v03-a

ผลลัพธ์หลังการกดปุ่ม [Enter] เพื่อรันคำสั่ง
c-v03-b

ใน vi ก็สามารถเปลี่ยนตัวอักษรตัวแรกในแต่ละคำให้เป็นตัวพิมพ์ใหญ่ได้ โดยใช้คำสั่ง :%s/\<[a-z]/\U&/g เหมือนกับ sed
c-v04-a

ผลลัพธ์หลังการกดปุ่ม [Enter] เพื่อรันคำสั่ง
c-v04-b

ลองนำไปใช้กันดูครับ

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.