<ก่อนหน้านี้ | เนื้อหา | ถัดไป>
ทางเลือก
คุณลักษณะนิพจน์ทั่วไปแบบขยายครั้งแรกที่เราจะพูดถึงเรียกว่า การสลับซึ่งเป็นระบบที่ช่วยให้การจับคู่เกิดขึ้นจากชุดของนิพจน์ เช่นเดียวกับนิพจน์วงเล็บช่วยให้อักขระตัวเดียวจับคู่จากชุดอักขระที่ระบุ การสลับช่วยให้จับคู่จากชุดของสตริงหรือนิพจน์ทั่วไปอื่นๆ
เพื่อสาธิต เราจะใช้ grep ร่วมกับ เสียงสะท้อน. ขั้นแรก ให้ลองจับคู่สตริงแบบเก่าธรรมดา:
[me@linuxbox ~]$ echo "AA" | grep AAA
AAA
[me@linuxbox ~]$ echo "BBB" | grep AAA
[me@linuxbox ~]$
[me@linuxbox ~]$ echo "AA" | grep AAA
AAA
[me@linuxbox ~]$ echo "BBB" | grep AAA
[me@linuxbox ~]$
ตัวอย่างที่ค่อนข้างตรงไปตรงมา ซึ่งเราไพพ์ผลลัพธ์ของ เสียงสะท้อน เข้าไป grep และเห็นผล เมื่อการแข่งขันเกิดขึ้น เราจะเห็นมันพิมพ์ออกมา เมื่อไม่มีการแข่งขันเกิดขึ้น เราจะไม่เห็นผลลัพธ์
ตอนนี้เราจะเพิ่ม alternation ซึ่งแสดงโดย metacharacter ของแถบแนวตั้ง:
[me@linuxbox ~]$ echo "AA" | grep -E 'AAA | BBB'
AAA
[me@linuxbox ~]$ echo "BBB" | grep -E 'AAA | BBB'
BBB
[me@linuxbox ~]$ echo "CCC" | grep -E 'AAA | BBB'
[me@linuxbox ~]$
[me@linuxbox ~]$ echo "AA" | grep -E 'AAA | BBB'
AAA
[me@linuxbox ~]$ echo "BBB" | grep -E 'AAA | BBB'
BBB
[me@linuxbox ~]$ echo "CCC" | grep -E 'AAA | BBB'
[me@linuxbox ~]$
ที่นี่เราเห็นนิพจน์ทั่วไป 'AAA | BBB'ซึ่งหมายความว่า "จับคู่สตริง AAA หรือสตริง BBB” โปรดสังเกตว่า เนื่องจากนี่เป็นคุณสมบัติเพิ่มเติม เราจึงเพิ่ม -E ตัวเลือก grep (ทั้งๆ ที่เราเพิ่งใช้ตัว . ได้ นกกระยาง แทน) และเราใส่นิพจน์ทั่วไปไว้ในเครื่องหมายคำพูดเพื่อป้องกันไม่ให้เชลล์ตีความอักขระเมตาของแถบแนวตั้งเป็นตัวดำเนินการไพพ์ ทางเลือกไม่จำกัดเพียงสองทางเลือก:
[me@linuxbox ~]$ echo "AA" | grep -E 'AAA|BBB|CCC'
AAA
[me@linuxbox ~]$ echo "AA" | grep -E 'AAA|BBB|CCC'
AAA
ในการรวมการสลับกับองค์ประกอบนิพจน์ทั่วไปอื่น ๆ เราสามารถใช้ () เพื่อแยกการสลับกัน:
[me@linuxbox ~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt
[me@linuxbox ~]$ grep -Eh '^(bz|gz|zip)' dirlist*.txt
นิพจน์นี้จะจับคู่ชื่อไฟล์ในรายการของเราที่ขึ้นต้นด้วย "bz", "gz" หรือ "zip" หากเราเว้นวงเล็บไว้ ความหมายของนิพจน์ทั่วไปนี้ :
[me@linuxbox ~]$ grep -Eh '^bz|gz|zip' dirlist*.txt
[me@linuxbox ~]$ grep -Eh '^bz|gz|zip' dirlist*.txt
การเปลี่ยนแปลงเพื่อให้ตรงกับชื่อไฟล์ที่ขึ้นต้นด้วย “bz” หรือมี “จีซ” หรือมี “ซิป”.