หนึ่งในเครื่องมือค้นหาที่มีชื่อเสียงบนระบบที่เหมือน Unix ซึ่งสามารถใช้ในการค้นหาอะไรก็ได้ ไม่ว่าจะเป็นไฟล์ หรือบรรทัดหรือหลายบรรทัดในไฟล์ เป็นยูทิลิตี้ grep มีฟังก์ชันมากมายที่สามารถนำมาประกอบกับตัวเลือกจำนวนมากที่รองรับ เช่น ค้นหาโดยใช้รูปแบบสตริง หรือรูปแบบ reg-ex หรือ reg-ex ที่ใช้ Perl เป็นต้น
เนื่องจากมีฟังก์ชันการทำงานที่แตกต่างกัน จึงมีหลายรูปแบบรวมทั้ง grep, egrep (GREP. แบบขยาย), fgrep (แก้ไข GREP), pgrep (กระบวนการ GREP), rgrep (GREP แบบเรียกซ้ำ) เป็นต้น แต่ตัวแปรเหล่านี้มีความแตกต่างเล็กน้อยกับต้นฉบับ grep ซึ่งทำให้เป็นที่นิยมและใช้งานโดยโปรแกรมเมอร์ Linux ต่างๆ สำหรับงานเฉพาะ
สิ่งสำคัญที่ยังคงต้องตรวจสอบคือความแตกต่างระหว่างตัวแปรหลักทั้งสามคือ 'เกรป', 'อีเกรป' และ 'fgrep' ของ grep ที่ทำให้ผู้ใช้ Linux เลือกรุ่นใดรุ่นหนึ่งตามความต้องการ
+
– เทียบเท่ากับอักขระก่อนหน้าอย่างน้อยหนึ่งรายการ?
– นี่หมายถึงการซ้ำซ้อนของอักขระก่อนหน้าเกือบ 1 ครั้ง ชอบ: NS?
น่าจะตรงกัน 'NS' หรือ 'อ่า'.(
– จุดเริ่มต้นของนิพจน์การสลับ)
– สิ้นสุดนิพจน์การสลับ|
– จับคู่นิพจน์ที่คั่นด้วย '|'
. ชอบ: “(a|b) cde”
จะเข้าคู่กัน 'เอบีซี' หรือ 'bbcde'.{
– อักขระเมตานี้ระบุการเริ่มต้นของตัวระบุช่วง ชอบ: “ก{2}”
ไม้ขีด “อา” ในไฟล์เช่น 2 ครั้ง}
– อักขระเมตานี้บ่งชี้จุดสิ้นสุดของตัวระบุช่วงความแตกต่างที่สำคัญบางประการระหว่าง grep, egrep และ fgrep สามารถไฮไลท์ได้ดังนี้ สำหรับชุดตัวอย่างนี้ เราถือว่าไฟล์ที่กำลังดำเนินการอยู่คือ:
grep หรือ Global Regular Expression Print เป็นโปรแกรมค้นหาหลักบนระบบที่คล้ายกับ Unix ซึ่งสามารถค้นหาสตริงประเภทใดก็ได้ในไฟล์หรือรายการไฟล์ หรือแม้แต่เอาต์พุตของคำสั่งใดๆ
แนะนำให้อ่าน:12 ตัวอย่างการใช้งานจริงของ Linux grep Command
มันใช้ นิพจน์ทั่วไปพื้นฐาน นอกเหนือจากสตริงปกติเป็นรูปแบบการค้นหา ในนิพจน์ทั่วไปพื้นฐาน (BRE) อักขระเมตาเช่น: '{','}'
,'(',')'
,'|'
,'+'
,'?'
สูญเสียความหมายและถือเป็นอักขระปกติของสตริง และจำเป็นต้องหลีกหนีหากจะถือว่าเป็นอักขระพิเศษ
นอกจากนี้ grep ยังใช้อัลกอริธึม Boyer-Moore สำหรับการค้นหาสตริงหรือนิพจน์ทั่วไปอย่างรวดเร็ว
$ grep -C 0 '(f|g) ile' check_file.jpg $ grep -C 0 '\(f\|g\)ile' check_file.jpg
เช่นที่นี่ เมื่อรันคำสั่งโดยไม่หลบหนี '(' ')'
และ '|'
จากนั้นจึงค้นหาสตริงที่สมบูรณ์เช่น “(f|g) ile”
ในไฟล์. แต่เมื่ออักขระพิเศษถูกหลีกเลี่ยง แทนที่จะถือว่าพวกเขาเป็นส่วนหนึ่งของสตริง grep ถือว่าพวกเขาเป็น meta-characters และค้นหาคำ "ไฟล์"
หรือ “ไจล์”
ในไฟล์.
Egrep หรือ grep-E เป็นรุ่นอื่นของ grep หรือ Extended grep grep เวอร์ชันนี้มีประสิทธิภาพและรวดเร็วในการค้นหารูปแบบนิพจน์ทั่วไปขณะดำเนินการ meta-characters ตามที่เป็นอยู่และไม่ได้แทนที่มันเป็นสตริงเหมือนใน grep และด้วยเหตุนี้คุณจึงเป็นอิสระจากภาระในการหลบหนี พวกเขาเช่นเดียวกับใน grep ใช้ ERE หรือชุด Extended Regular Expression
ในกรณีของ egrep แม้ว่าคุณจะไม่ได้หลีกเลี่ยงอักขระเมตาก็ตาม มันจะถือว่าพวกมันเป็นอักขระพิเศษและแทนที่พวกมันด้วยความหมายพิเศษแทนที่จะถือว่าพวกมันเป็นส่วนหนึ่งของสตริง
$ egrep -C 0 '(f|g) ile' check_file. $ egrep -C 0 '\(f\|g\)ile' check_file.jpg
ชอบที่นี่, egrep ค้นหา "ไฟล์"
string เมื่อ meta-character ไม่ได้หนีตามความหมายของอักขระเหล่านี้ แต่เมื่ออักขระเหล่านี้หนีรอดไปได้ egrep ถือว่าพวกเขาเป็นส่วนหนึ่งของสตริงและค้นหาสตริงที่สมบูรณ์ “(f|g) ile”
ในไฟล์.
Fgrep หรือ คงที่ grep หรือ grep -F เป็น grep อีกเวอร์ชันหนึ่งที่รวดเร็วในการค้นหาเมื่อต้องค้นหาสตริงทั้งหมด แทนที่จะใช้นิพจน์ทั่วไป เนื่องจากไม่รู้จักนิพจน์ทั่วไป แต่อย่างใด อักขระเมตา สำหรับการค้นหาสตริงโดยตรง นี่คือเวอร์ชันของ grep ที่ควรเลือก
Fgrep ค้นหาสตริงที่สมบูรณ์และไม่รู้จักอักขระพิเศษซึ่งเป็นส่วนหนึ่งของนิพจน์ทั่วไปแม้ว่าจะใช้ Escape หรือไม่ใช้ Escape
$ fgrep -C 0 '(f|g) ile' check_file. $ fgrep -C 0 '\(f\|g\)ile' check_file.jpg
เช่นเดียวกับเมื่อไม่ได้หนีอักขระเมตา fgrep ค้นหาสตริงที่สมบูรณ์ “(f|g) ile”
ในไฟล์ และเมื่ออักขระเมตาหนีรอด คำสั่ง fgrep จะค้นหา “\(f\|g\)ile”
อักขระทั้งหมดตามที่อยู่ในไฟล์
เราได้กล่าวถึงตัวอย่างเชิงปฏิบัติของคำสั่ง grep ที่คุณสามารถอ่านได้ที่นี่ หากคุณต้องการใช้ประโยชน์จากคำสั่ง grep ใน Linux ให้มากขึ้น
เรียนรู้ 12 ตัวอย่างการปฏิบัติของ Linux grep Command
ที่เน้นด้านบนคือความแตกต่างระหว่าง 'เกรป', 'อีเกรป' และ 'fgrep'. นอกเหนือจากความแตกต่างในชุดของนิพจน์ทั่วไปที่ใช้ และความเร็วของการดำเนินการ พารามิเตอร์บรรทัดคำสั่ง rest ยังคงอยู่ เหมือนกันสำหรับ grep ทั้งสามเวอร์ชันและแม้กระทั่งแทนที่จะแนะนำให้ใช้ "egrep" หรือ "fgrep", "grep -E" หรือ "grep -F" ใช้แล้ว.
หากคุณพบความแตกต่างอื่นๆ ระหว่าง grep ทั้งสามเวอร์ชันนี้ โปรดพูดถึงพวกเขาในความคิดเห็นของคุณ