บทช่วยสอนนิพจน์ทั่วไปของ Linux: ตัวอย่าง Grep Regex
⚡ สรุปอย่างชาญฉลาด
นิพจน์ปกติ (Regular Expression) ใน Linux คือลำดับอักขระพิเศษที่ใช้ค้นหาข้อมูลและจับคู่รูปแบบที่ซับซ้อนในเครื่องมือต่างๆ เช่น grep, sed และ vi โดยใช้รูปแบบพื้นฐาน ช่วงเวลา ขยาย และการขยายวงเล็บปีกกา เพื่อกรองข้อความได้อย่างแม่นยำ

นิพจน์ปกติ (Regular expressions) เป็นหนึ่งในคุณสมบัติที่ทรงพลังที่สุดของ ลินุกซ์ เครื่องมือข้อความที่ช่วยให้คุณจับคู่ กรอง และแปลงข้อมูลด้วยรูปแบบที่กระชับ หน้านี้อธิบายรูปแบบพื้นฐาน รูปแบบช่วง และรูปแบบขยาย รวมถึงการขยายวงเล็บปีกกา พร้อมตัวอย่างการใช้งาน grep
นิพจน์ทั่วไปของ Linux คืออะไร
นิพยามปกติ (Regular Expression) ใน Linux คืออักขระพิเศษที่ช่วยในการค้นหาข้อมูลและจับคู่รูปแบบที่ซับซ้อน นิพยามปกติมักย่อว่า 'regexp' หรือ 'regex' มีการใช้งานในโปรแกรม Linux หลายโปรแกรม เช่น... grepรวมถึงคำสั่ง bash, rename, sed และอื่นๆ อีกมากมาย
ประเภทของนิพจน์ทั่วไป
เพื่อให้เข้าใจง่ายขึ้น เรามาเรียนรู้ประเภทต่างๆ ของนิพจน์ปกติทีละประเภทกัน หน้านี้จะกล่าวถึงนิพจน์ปกติพื้นฐาน นิพจน์ปกติแบบช่วง และนิพจน์ปกติแบบขยาย และปิดท้ายด้วยการขยายวงเล็บปีกกา
นิพจน์ทั่วไปพื้นฐาน
คำสั่งที่ใช้กันทั่วไปบางส่วนที่ทำงานร่วมกับนิพจน์ปกติ ได้แก่ tr, sed, viและ grep ตารางด้านล่างแสดงรายการนิพจน์ปกติพื้นฐานบางส่วน
| สัญลักษณ์ | Descriptไอออน |
|---|---|
| . | แทนที่อักขระใดๆ |
| ^ | ตรงกับจุดเริ่มต้นของสตริง |
| $ | ตรงกับส่วนท้ายของสตริง |
| * | ตรงกับอักขระก่อนหน้าศูนย์ครั้งขึ้นไป |
| \ | แทนอักขระพิเศษ |
| () | จัดกลุ่มนิพจน์ทั่วไป |
| ? | ตรงกับอักขระหนึ่งตัวพอดี |
มาดูตัวอย่างกัน ขั้นแรก รันคำสั่ง `cat sample` เพื่อแสดงเนื้อหาของไฟล์ที่มีอยู่ ดังที่แสดงด้านล่าง
ถัดไป ให้ค้นหาเนื้อหาที่มีตัวอักษร 'a' ภาพหน้าจอด้านล่างแสดงให้เห็นว่า grep ค้นหาทุกบรรทัดที่มีตัวอักษร 'a'
เครื่องหมาย ^ ใช้สำหรับจับคู่กับจุดเริ่มต้นของสตริง ตัวอย่างด้านล่างนี้เป็นการค้นหาเนื้อหาที่ขึ้นต้นด้วยตัวอักษร 'a'
เฉพาะบรรทัดที่ขึ้นต้นด้วยอักขระดังกล่าวเท่านั้นที่จะถูกกรอง บรรทัดที่ไม่มีอักขระ 'a' อยู่ที่จุดเริ่มต้นจะถูกละเว้น
ลองดูตัวอย่างอื่นกันอีกครั้ง ภาพหน้าจอด้านล่างแสดงเนื้อหาไฟล์ตัวอย่างก่อนที่จะกรองโดยใช้การสิ้นสุดของบรรทัด
เลือกเฉพาะบรรทัดที่ลงท้ายด้วยตัวอักษร 't' โดยใช้เครื่องหมาย '$' ดังแสดงด้านล่าง
นิพจน์ทั่วไปแบบช่วงเวลา
นิพจน์เหล่านี้ระบุจำนวนครั้งที่อักขระนั้นปรากฏในสตริง โดยมีรายการดังต่อไปนี้
| การแสดงออก | Descriptไอออน |
|---|---|
| {NS} | จับคู่อักขระก่อนหน้าที่ปรากฏ 'n' เท่าทุกประการ |
| {น,ม} | จับคู่อักขระก่อนหน้าที่ปรากฏ 'n' ครั้ง แต่ไม่เกิน m |
| {น, } | จับคู่อักขระนำหน้าเฉพาะเมื่อปรากฏ 'n' ครั้งขึ้นไป |
ตัวอย่างเช่น กรองบรรทัดทั้งหมดที่มีอักขระ 'p' ภาพหน้าจอด้านล่างแสดงบรรทัดที่ตรงกัน
ทีนี้ลองตรวจสอบดูว่าตัวอักษร 'p' ปรากฏอยู่ในสตริงสองครั้งติดกันหรือไม่ โดยใช้ไวยากรณ์ดังนี้:
cat sample | grep -E p\{2}
ผลการแข่งขันแบบช่วงเวลาแสดงอยู่ด้านล่าง
หมายเหตุ: คุณต้องเพิ่ม -E ด้วยนิพจน์ทั่วไปเหล่านี้
ขยายนิพจน์ทั่วไป
นิพจน์ปกติเหล่านี้เป็นการรวมนิพจน์มากกว่าหนึ่งนิพจน์เข้าด้วยกัน ตัวอย่างเช่น:
| การแสดงออก | Descriptไอออน |
|---|---|
| \+ | จับคู่อักขระก่อนหน้าอย่างน้อยหนึ่งรายการ |
| \? | จับคู่อักขระก่อนหน้าเป็นศูนย์หรือหนึ่งรายการ |
ตัวอย่างเช่น ค้นหาตัวอักษร 't' ทั้งหมด ภาพหน้าจอด้านล่างแสดงผลลัพธ์
สมมติว่าคุณต้องการกรองบรรทัดที่ตัวอักษร 'a' อยู่หน้าตัวอักษร 't' คุณสามารถใช้คำสั่งดังต่อไปนี้:
cat sample|grep "a\+t"
ผลลัพธ์แสดงอยู่ในภาพหน้าจอต่อไปนี้
การขยายตัวของรั้ง
รูปแบบไวยากรณ์สำหรับการขยายวงเล็บปีกกาคือลำดับหรือรายการที่คั่นด้วยเครื่องหมายจุลภาคภายในวงเล็บปีกกา '{}' โดยรายการเริ่มต้นและรายการสุดท้ายในลำดับจะคั่นด้วยจุดสองจุด '..'
ตัวอย่างบางส่วนแสดงไว้ด้านล่าง
ในตัวอย่างข้างต้น คำสั่ง echo สร้างสตริงโดยใช้การขยายวงเล็บปีกกา ทำให้ได้สตริงหลายสตริงจากรูปแบบเดียว










