Regex สำหรับ“ หรือ” ของคำหลายคำใน grep


12
[Computer]$ grep "foo|bar" filename

ฉันเข้าใจว่าคำสั่งดังกล่าวควรกลับแต่ละบรรทัดในชื่อไฟล์ที่มี "foo" หรือ "bar" ออก หน้าคนยืนยัน | ในฐานะ Regex หรือสัญลักษณ์และรหัสใช้งานได้กับ "foo" และ "bar" โดยอิสระ ฉันกำลังคิดถึงอะไร

คำตอบ:


21

grep ใช้นิพจน์ปกติพื้นฐาน (BRE) เป็นค่าเริ่มต้น จากหน้าคน:

Basic vs Extended Regular Expressions: ในนิพจน์ทั่วไปพื้นฐานเมตาอักขระ, +, {, |, (และ) สูญเสียความหมายพิเศษ ใช้แบ็กสแลชเวอร์ชัน \ ?, +, {, \ |, (และ) แทน

ดังนั้นคุณต้องหนีจาก|:

grep "foo\|bar" filename 

หรือเปิดการแสดงผลปกติเพิ่มเติม:

grep -E "foo|bar" filename

ฉันเห็นว่าในหน้าคนและเข้าใจผิด ฉันคิดว่านั่นหมายความว่า \ | จะทำให้มองหานิพจน์ที่สมบูรณ์ "foo | bar" ซึ่งตรงข้ามกับนิพจน์แต่ละรายการ ขอบคุณสำหรับการตอบสนองที่รวดเร็ว!
Ocasta Eshu

4
นอกจากนี้คุณยังสามารถใช้egrep(นามแฝงสำหรับgrep -E) grepแทน
speakr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.