นอกจากเปลี่ยนแปลงข้อความที่ต้องการด้วย 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/;/,/ สังเกตด้านล่างจะขึ้นคำสั่งที่พิมพ์ลงไป
แล้วกดปุ่ม [Enter] เพื่อรันคำสั่ง
ผลลัพธ์ที่ได้จะเป็นการเปลี่ยนข้อความจาก ; ไปเป็น , แต่คำสั่งนี้จะเปลี่ยนเฉพาะบรรทัดปัจจุบันที่เคอร์เซอร์อยู่เท่านั้น ในตัวอย่างนี้คือบรรทัดแรก
หมายเหตุ ใน vi สามารถกดปุ่ม u เพื่อ undo หรือยกเลิกการเปลี่ยนแปลงครั้งล่าสุดได้
หากต้องการเปลี่ยนทุกบรรทัดต้องใช้เครื่องหมาย % นำหน้า s
ตัวอย่างการพิมพ์คำสั่ง :%s/;/,/ สังเกตด้านล่างจะขึ้นคำสั่งที่พิมพ์ลงไป
ผลลัพธ์หลังการกดปุ่ม [Enter] เพื่อรันคำสั่ง
ผลลัพธ์ที่ได้จะเป็นการเปลี่ยนแปลงข้อความจาก ; ไปเป็น , ทุกบรรทัดแล้ว แต่จะเปลี่ยนเฉพาะ ; ที่เจอตัวแรกในแต่ละบรรทัด
เช่นเดียวกับ sed หากต้องการเปลี่ยนทุกตัวอักษรในแต่ละบรรทัด ให้ระบุ FLAGS ‘g’ ต่อท้ายคำสั่ง
ตัวอย่างการใช้คำสั่ง :%s/;/,/g
ผลลัพธ์หลังการกดปุ่ม [Enter] เพื่อรันคำสั่ง
ใน vi ก็สามารถเปลี่ยนตัวอักษรตัวแรกในแต่ละคำให้เป็นตัวพิมพ์ใหญ่ได้ โดยใช้คำสั่ง :%s/\<[a-z]/\U&/g เหมือนกับ sed
ผลลัพธ์หลังการกดปุ่ม [Enter] เพื่อรันคำสั่ง
ลองนำไปใช้กันดูครับ