อ่าน 6 นาที
เกรป
grep เป็น ยูทิลิ ตี้ บรรทัดคำสั่ง สำหรับค้นหา ข้อความ ที่มีบรรทัดตรงกับนิพจน์ ปกติ ชื่อของมันมาจากคำสั่ง ed ( global , regular expression , print ) ซึ่งมีผลเช่นเดียวกัน [ 3 ] [ 4...
เกรป
| เกรป | |
|---|---|
ตัวอย่างคำสั่ง grep | |
| ผู้เขียนต้นฉบับ | เคน ทอมป์สัน[ 1 ] [ 2 ] |
| นักพัฒนา | เอทีแอนด์ที เบลล์ แล็บโบราทอรีส์ |
| ปล่อย | พฤศจิกายน พ.ศ. 2516 [ 1 ] |
| เขียนเป็น | ซี |
| ระบบปฏิบัติการ | ยูนิก , ระบบปฏิบัติการคล้ายยูนิก , Plan 9 , Inferno , OS-9 , MSX-DOS , IBM i |
| พิมพ์ | สั่งการ |
grepเป็น ยูทิลิ ตี้บรรทัดคำสั่งสำหรับค้นหาข้อความที่มีบรรทัดตรงกับนิพจน์ปกติชื่อของมันมาจากคำสั่งed ( global , regular expression , print ) ซึ่งมีผลเช่นเดียวกัน[ 3 ] [ 4 ] grep ได้รับการพัฒนาขึ้นครั้งแรกสำหรับ ระบบปฏิบัติการ Unixและสามารถใช้งานได้ทั่วไปใน ระบบ ที่คล้าย Unixและระบบอื่นๆ เช่นOS-9 [ 5 ] คำสั่งเชลล์ที่เรียกใช้ยูทิลิตี้มีชื่อเดียวกัน: . g/re/pgrep
ประวัติศาสตร์
ก่อนที่จะมีการตั้งชื่อ grep เป็นยูทิลิตี้ส่วนตัวที่เขียนโดยKen Thompsonเพื่อค้นหาไฟล์ตามรูปแบบที่กำหนดDoug McIlroyซึ่งไม่ทราบถึงการมีอยู่ของโปรแกรมดังกล่าว ได้ขอให้ Thompson เขียนโปรแกรมดังกล่าว Thompson ตอบว่าเขาจะคิดเกี่ยวกับยูทิลิตี้ดังกล่าวข้ามคืน แต่จริงๆ แล้วเขาใช้เวลาประมาณหนึ่งชั่วโมงในการแก้ไขข้อผิดพลาดและปรับปรุงโปรแกรมของเขาเองที่ชื่อว่าs(ชื่อย่อของ "search") วันรุ่งขึ้นเขาได้นำเสนอโปรแกรมให้กับ McIlroy ซึ่งกล่าวว่ามันตรงกับสิ่งที่เขาต้องการพอดี เรื่องราวของ Thompson อาจอธิบายความเชื่อที่ว่า grep ถูกเขียนขึ้นข้ามคืน[ 6 ]
Thompson เขียนเวอร์ชันแรกในภาษาแอสเซมบลีPDP-11 เพื่อช่วยLee E. McMahonวิเคราะห์ข้อความของThe Federalist Papersเพื่อระบุผู้เขียนเอกสารแต่ละฉบับ[ 7 ]โปรแกรมแก้ไขข้อความ ed (ซึ่ง Thompson เป็นผู้เขียนเช่นกัน) รองรับ นิพจน์ปกติแต่ไม่สามารถใช้ค้นหาข้อความจำนวนมากได้ เนื่องจากโหลดไฟล์ทั้งหมดลงในหน่วยความจำเพื่อเปิดใช้งาน การแก้ไข แบบเข้าถึงแบบสุ่มดังนั้น Thompson จึงแยกโค้ดนิพจน์ปกตินั้นออกมาเป็นเครื่องมือแบบสแตนด์อโลน ซึ่งจะประมวลผลไฟล์ที่มีความยาวตามอำเภอใจตามลำดับโดยไม่ต้องบัฟเฟอร์ลงในหน่วยความจำมากเกินไป[ 1 ]เขาเลือกชื่อนี้เพราะใน ed คำสั่ง `grep` ซึ่ง ` < regular expression > ` คือ นิพจน์ ปกติที่จะจับคู่ จะพิมพ์ทุกบรรทัดที่มีรูปแบบการจับคู่ที่ระบุ[ 8 ] [ 9 ] grep ถูกรวมไว้ในUnix เวอร์ชัน 4เป็น ครั้งแรก McIlroy ระบุว่า grep นั้น "โดยทั่วไปถือเป็นเครื่องมือ ซอฟต์แวร์ต้นแบบ" และยกย่อง grep ว่า "ฝังรากลึกอย่างถาวร" ใน ปรัชญาเครื่องมือของ Thompson ใน Unix [ 10 ]g/re/pre
การนำไปใช้
มีการใช้งาน grep หลายรูปแบบในระบบปฏิบัติการและสภาพแวดล้อมการพัฒนาซอฟต์แวร์หลายแห่ง[ 11 ]รูปแบบแรกๆ ได้แก่egrepและfgrepซึ่งถูกนำมาใช้ในUnix เวอร์ชัน 7 [ 10 ] รูปแบบ นี้egrepรองรับ ไวยากรณ์ นิพจน์ปกติแบบขยายที่เพิ่มโดยAlfred Ahoหลังจากที่Ken Thompsonได้นำนิพจน์ปกติมาใช้[ 12 ] รูปแบบ นี้fgrepค้นหาสตริงใดๆ จากรายการ สตริง คงที่โดยใช้อัลกอริทึมการจับคู่สตริง Aho–Corasick [ 13 ] ไบนารีของรูปแบบเหล่านี้มีอยู่ในระบบสมัยใหม่ โดยปกติจะเชื่อมโยงกับ grep หรือเรียกใช้ grep เป็นสคริปต์เชลล์โดยเพิ่มแฟล็ กที่เหมาะสม เช่นคำสั่งและแม้ว่าจะใช้งานกันทั่วไปใน ระบบ POSIXจนถึงจุดที่ข้อกำหนด POSIX กล่าวถึงการใช้งานอย่างแพร่หลาย แต่จริงๆ แล้วไม่ได้เป็นส่วนหนึ่งของ POSIX [ 14 ]execgrep-E"$@"egrepfgrep
คำสั่งอื่นๆ มีคำว่า "grep" เพื่อระบุว่าเป็นเครื่องมือค้นหา โดยทั่วไปจะเป็นเครื่องมือที่ใช้การจับคู่ตามนิพจน์ปกติpgrepตัวอย่างเช่น ยูทิลิตี้จะแสดงกระบวนการที่มีชื่อตรงกับนิพจน์ปกติที่กำหนด[ 15 ]
ในภาษาการเขียนโปรแกรมPerlgrepฟังก์ชันในตัวจะค้นหาองค์ประกอบในรายการที่ตรงตามคุณสมบัติบางอย่าง[ 16 ]ฟังก์ชันลำดับสูงนี้มักจะมีชื่อว่าfilterหรือwhereในภาษาอื่นๆ
คำสั่ง นี้pcregrepเป็นการใช้งาน grep ที่ใช้ไวยากรณ์นิพจน์ปกติของ Perl [ 17 ]ฟังก์ชันที่คล้ายกันนี้สามารถเรียกใช้ได้ใน grep เวอร์ชัน GNU โดยใช้-Pแฟล็ก[ 18 ]
พอร์ตของ grep (ภายในCygwinและGnuWin32เป็นต้น) ยังทำงานภายใต้Microsoft Windows อีกด้วย Windows บางเวอร์ชันมีคำสั่งที่คล้ายกันqgrepหรือfindstrคำสั่ง[ 19 ]
คำสั่ง grep ยังเป็นส่วนหนึ่งของMSX-DOS2 ToolsของASCIIสำหรับMSX-DOSเวอร์ชัน 2 อีกด้วย [ 20 ]
คำ สั่ง grep, egrep, และfgrepได้รับการพอร์ตไปยังระบบปฏิบัติการIBM i แล้ว [ 21 ]
ซอฟต์แวร์Adobe InDesignมีฟังก์ชัน GREP (ตั้งแต่เวอร์ชัน CS3 (2007) [ 22 ] ) ในกล่องโต้ตอบค้นหา/เปลี่ยนแปลง[ 23 ]แท็บ "GREP" และแนะนำใน InDesign CS4 [ 24 ]ในสไตล์ย่อหน้า[ 25 ] "สไตล์ GREP"
เห็นด้วย
agrep(approximate grep) เป็น โปรแกรม จับคู่สตริงโดยประมาณแบบโอเพนซอร์ส ซึ่งพัฒนาโดยUdi Manberและ Sun Wu ระหว่างปี 1988 ถึง 1991 [ 26 ]สำหรับใช้กับ ระบบปฏิบัติการ Unixต่อมาได้มีการพอร์ตไปยังOS /2 , DOSและWindows
grepจะจับคู่แม้ว่าข้อความจะตรงกับรูปแบบการค้นหาโดยประมาณ เท่านั้น [ 27 ]
คำสั่งต่อไปนี้จะค้นหาnetmasksในไฟล์myfileแต่ยังรวมถึงคำอื่นๆ ที่สามารถอนุมานได้จากคำนั้น โดยมีเงื่อนไขว่าต้องมีการแทนที่ไม่เกินสองครั้ง
agrep -2 netmasks myfile
ตัวอย่างนี้สร้างรายการผลลัพธ์ที่ตรงกัน โดยผลลัพธ์ที่ใกล้เคียงที่สุด (กล่าวคือ ผลลัพธ์ที่มีการเปลี่ยนแปลงน้อยที่สุด) จะถูกแสดงก่อน เครื่องหมายคำสั่ง-Bหมายถึง "ดีที่สุด"
agrep -B netmasks myfile
การใช้เป็นคำกริยา
ในเดือนธันวาคม พ.ศ. 2546 พจนานุกรมภาษาอังกฤษออนไลน์ของ อ็อกซ์ฟอร์ด ได้เพิ่มคำว่า "grep" เป็นทั้งคำนามและคำกริยา[ 28 ]
การใช้คำกริยาทั่วไปคือวลี "คุณไม่สามารถ grep ต้นไม้ที่ตายแล้วได้" ซึ่งหมายความว่าเราสามารถค้นหาผ่านสื่อดิจิทัลได้ง่ายกว่าโดยใช้เครื่องมือเช่น grep มากกว่าการค้นหาจากเอกสารที่เป็นกระดาษ (เช่น เอกสารที่ทำจาก "ต้นไม้ที่ตายแล้ว" ซึ่งในบริบทนี้เป็นคำดูถูกสำหรับกระดาษ) [ 29 ]
ดูเพิ่มเติม
- agrep – คำสั่งจับคู่สตริงโดยประมาณ
- อัลกอริทึมการค้นหาสตริง Boyer–Moore – อัลกอริทึมการค้นหาที่ใช้ใน grep
- find (Unix) – คำสั่งในระบบ Unix ที่ใช้ค้นหาไฟล์แทนข้อความ
- find (Windows)หรือfindstr – คำสั่งใน DOS/Windows ที่ใช้ค้นหาข้อความในไฟล์ คล้ายกับ grep
- รายการคำสั่ง POSIX
- ngrep – เครื่องมือ grep สำหรับเครือข่าย
- vgrep – คำศัพท์เชิงเสียดสีที่หมายถึง การตรวจสอบด้วยสายตา
ลิงก์ภายนอก
- เว็บไซต์อย่างเป็นทางการของ GNU Grep
- คู่มือการใช้งาน GNU Grep
- – คู่มือโปรแกรมเมอร์Plan 9 เล่ม 1
- – คู่มือคำสั่งทั่วไปของเกม Inferno
- "ทำไม GNU grep ถึงเร็ว" - รายละเอียดการใช้งานจากผู้พัฒนา GNU grep
- คำสั่ง Grep – 25 ตัวอย่างการใช้งานจริง
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ เกรป
grep เป็น ยูทิลิ ตี้ บรรทัดคำสั่ง สำหรับค้นหา ข้อความ ที่มีบรรทัดตรงกับนิพจน์ ปกติ ชื่อของมันมาจากคำสั่ง ed ( global , regular expression , print ) ซึ่งมีผลเช่นเดียวกัน [ 3 ] [ 4...
ประวัติศาสตร์
ก่อนที่จะมีการตั้งชื่อ grep เป็นยูทิลิตี้ส่วนตัวที่เขียนโดย Ken Thompson เพื่อค้นหาไฟล์ตามรูปแบบที่กำหนด Doug McIlroy ซึ่งไม่ทราบถึงการมีอยู่ของโปรแกรมดังกล่าว ได้ขอให้ Thompson เขียนโปรแกรมดังกล่าว Thompson ตอบว่าเขาจะคิดเกี่ยวกับยูทิลิตี้ดังกล่าวข้ามคืน...
การนำไปใช้
มีการใช้งาน grep หลายรูปแบบในระบบปฏิบัติการและสภาพแวดล้อมการพัฒนาซอฟต์แวร์หลายแห่ง [ 11 ] รูปแบบแรกๆ ได้แก่ egrep และ fgrep ซึ่งถูกนำมาใช้ในUnix เวอร์ชัน 7 [ 10 ] รูปแบบ นี้ egrep รองรับ ไวยากรณ์ นิพจน์ปกติแบบขยาย ที่เพิ่มโดย Alfred Aho หลังจากที่ Ken...
เห็นด้วย
agrep (approximate grep) เป็น โปรแกรม จับคู่สตริงโดยประมาณแบบ โอเพนซอร์ส ซึ่งพัฒนาโดย Udi Manber และ Sun Wu ระหว่างปี 1988 ถึง 1991 [ 26 ] สำหรับใช้กับ ระบบปฏิบัติการ Unix ต่อมาได้มีการพอร์ตไปยังOS /2 , DOS และ Windows