เกร็ป

**<code>เกร็ป</code>** `(grep`) เป็นโปรแกรมอรรถประโยชน์บรรทัดคำสั่งสำหรับการค้นหาชุดข้อมูลข้อความธรรมดาสำหรับบรรทัดที่ตรงกับนิพจน์ทั่วไป ชื่อของมันมาจากคำสั่ง ed คือ `g/re/p` (***g'''lobal / '''r'''egular '''e'''xpression search '''/''' and '''p'''rint'') ซึ่งมีผลเช่นเดียวกัน <code>grep</code> เดิมได้รับการพัฒนาสำหรับระบบปฏิบัติการ[[ยูนิกซ์]]แต่ต่อมาสามารถใช้งานได้กับระบบ[[เหมือนยูนิกซ์]]ทั้งหมดและบางระบบอื่น เช่น [[โอเอส-9|OS-9]] 

== การนำไปใช้ ==
มีการการ[[อิมพลีเมนต์]] <code>grep</code> หลากหลายเจ้า ทั้งในระบบปฏิบัติการและสิ่งแวดล้อมการพัฒนาซอฟต์แวร์จำนวนมาก เวอร์ชันแรก ๆ ได้แก่ <code>egrep</code> และ <code>fgrep</code> ซึ่งเปิดตัวใน [[เวอร์ชัน 7 ยูนิกซ์|Unix เวอร์ชัน 7]] ตัวแปร "<code>egrep</code>" รองรับไวยากรณ์[[นิพจน์ปรกติ]]ที่เพิ่มโดย [[อัลเฟรด อาโฮ|Alfred Aho]] หลังจากการนำนิพจน์ทั่วไปดั้งเดิมของ [[เคน ทอมป์สัน|Ken Thompson]] ไปใช้งาน ตัวแปร "<code>fgrep</code>" ค้นหาในรายการของสตริง ''คงที่'' ใด ๆ โดยใช้[[อัลกอริธึมการจับคู่สตริง Aho–Corasick|ขั้นตอนวิธีการจับคู่สตริง Aho–Corasick]]  ไบนารีของตัวแปรเหล่านี้มีอยู่ในระบบสมัยใหม่ โดยปกติแล้วจะเชื่อมโยงไปยัง <code>grep</code> หรือการเรียก grep เป็นเชลล์สคริปต์โดยมีการเพิ่มแฟล็กที่เหมาะสม เช่น <code>exec grep -E "$@"</code>

<code>egrep</code> และ <code>fgrep</code> แม้จะใช้งานทั่วไปบนระบบ [[POSIX]] จนถึงจุดที่ข้อกำหนด POSIX กล่าวถึงการมีอยู่อย่างแพร่หลาย แต่จริง ๆ แล้วมิได้เป็นส่วนหนึ่งของ POSIX

คำสั่งอื่น ๆ มีคำว่า "grep" เพื่อระบุว่าเป็นเครื่องมือค้นหา ซึ่งโดยทั่วไปจะใช้การจับคู่นิพจน์ทั่วไป ตัวอย่างเช่น ยูทิลิตี้ <code>[[พีเกรป|pgrep]]</code> จะแสดงกระบวนการที่มีชื่อตรงกับนิพจน์ทั่วไปที่กำหนด 

ใน[[ภาษาเพิร์ล]] ''grep'' คือชื่อของฟังก์ชันในตัวที่ค้นหาองค์ประกอบในรายการที่ตรงตามคุณสมบัติบางอย่าง โดยทั่วไป[[ฟังก์ชั่นลำดับที่สูงขึ้น|ฟังก์ชันลำดับที่สูงกว่า]]นี้จะมีชื่อว่า <code>[[ตัวกรอง (ฟังก์ชันลำดับสูงกว่า)|filter]]</code> หรือ <code>where</code> ในภาษาอื่น

คำสั่ง <code>pcregrep</code> คือการนำ <code>grep</code> ไปใช้ซึ่งใช้ไวยากรณ์ [[นิพจน์ปรกติ|นิพจน์ทั่วไปของ Perl]] ฟังก์ชันที่คล้ายกันสามารถเรียกใช้ได้ใน <code>grep</code> เวอร์ชัน GNU พร้อมด้วยแฟล็ก <code>-P</code>

[[การย้ายพอร์ต|พอร์ต]] ของ <code>grep</code> (ภายใน [[ซิกวิน|Cygwin]] และ [[GnuWin32]] เป็นต้น) ยังทำงานบน[[ไมโครซอฟท์ วินโดวส์]] นอกจากนี้วินโดวส์บางเวอร์ชันมีคำสั่ง <code>qgrep</code> หรือ <code>[[ค้นหา|findstr]]</code> ที่คล้ายกัน 

คำสั่ง <code>grep</code> ยังเป็นส่วนหนึ่งของ ''เครื่องมือ MSX-DOS2'' ของ [[บริษัท แอสซีไอ คอร์ปอเรชั่น|ASCII]] สำหรับ [[MSX-DOS]] เวอร์ชัน 2 

ที่ , และคำสั่ง ยังถูกย้ายไปยังระบบปฏิบัติการ IBM i อีกด้วย 

ซอฟต์แวร์ [[อะโดบี อินดีไซน์|Adobe InDesign]] มีฟังก์ชัน GREP (ตั้งแต่เวอร์ชัน CS3 (2007)) ในกล่องโต้ตอบ ''ค้นหา/เปลี่ยนแปลง''  แท็บ "GREP" และนำมาใช้กับ InDesign CS4 ใน ''รูปแบบย่อหน้า'' "GREP สไตล์"

=== agrep ===
***agrep**' (approximate grep, grep โดยประมาณ) จะจับคู่แม้ว่าข้อความจะพอดีกับรูปแบบการค้นหา *โดยประมาณ* เท่านั้น

คำสั่งต่อไปนี้จะค้นหา *netmasks* ในไฟล์ *myfile* แต่ยังรวมไปถึงคำอื่น ๆ ที่สามารถนำมาจากคำนี้ได้ โดยจะมีการแทนที่ไม่เกินสองครั้ง
 agrep -B netmasks myfile
ตัวอย่างนี้สร้างรายการการจับคู่ที่ใกล้เคียงที่สุด ซึ่งเป็นรายการที่มีการเปลี่ยนตัวน้อยที่สุดแสดงไว้เป็นอันดับแรก แฟล็กคำสั่ง *B* หมายถึง *best* :
 agrep -B netmasks myfile

## การใช้เป็นคำกริยา
ในเดือนธันวาคม พ.ศ. 2546 *[[พจนานุกรมภาษาอังกฤษ ฉบับออกซฟอร์ด|Oxford English Dictionary]] Online* ได้เพิ่ม "grep" เป็นทั้งคำนามและคำกริยา

การใช้เป็นคำกริยาทั่วไปคือวลี "คุณไม่สามารถ grep ต้นไม้ที่ตายแล้วได้" ซึ่งหมายความว่าเราสามารถค้นหาผ่านสื่อดิจิทัลได้ง่ายกว่าโดยใช้เครื่องมือเช่น `grep` มากกว่าการค้นหาด้วยกระดาษ (เช่นที่ทำจาก "ต้นไม้ที่ตายแล้ว" ซึ่งในบริบทนี้ถือเป็นคำดูหมิ่นสำหรับกระดาษ)

## ดูเพิ่ม

* ขั้นตอนวิธีการจับคู่สตริง Aho–Corasick 
* agrep คำสั่งจับคู่สตริงโดยประมาณ
* find (Windows) หรือ Findstr คำสั่ง DOS และ Windows ที่ทำการค้นหาข้อความ คล้ายกับ `grep` ธรรมดา
* find (Unix) คำสั่ง Unix ที่ใช้ค้นหาไฟล์ตามแอตทริบิวต์ แตกต่างจาก `grep` มาก
* รายการคำสั่งยูนิกซ์
* vgrep หรือ "visual `grep` "
* ngrep หรือ network grep

## อ้างอิง

; หมายเหตุ 

## แหล่งข้อมูลอื่น
* เว็บไซต์อย่างเป็นทางการของ GNU Grep
* คู่มือ GNU Grep
* grep(1) – คู่มือโปรแกรมเมอร์  เล่ม 1
* grep(1) – คู่มือ คำสั่ง  
* "ทำไม GNU grep ถึงเร็ว" - รายละเอียดการใช้งานจากผู้เขียน GNU grep
* Command Grep – 25 ตัวอย่างเชิงปฏิบัติ
หมวดหมู่:โปรแกรมยูนิกซ์มาตรฐาน
หมวดหมู่:Webarchive template wayback links