คู่มือนี้อธิบายวิธีใช้ grep ยูทิลิตี้สำหรับค้นหา คำ สตริง หลายคำ และ รูปแบบ คุณสามารถดูตัวอย่างทั้งหมดของคำสั่งที่ใช้ในการดำเนินการนี้ได้ที่ด้านล่าง
Grep คืออะไร
เมื่อเราอ้างถึง grep เรากำลังพูดถึงฟังก์ชันบรรทัดคำสั่ง . Grep ย่อมาจาก Global Regular Expression Print โดยพื้นฐานแล้ว มันจะค้นหาไฟล์อินพุตที่มองหาบรรทัดที่ตรงกับนิพจน์ทั่วไปบางรายการ จากนั้นจะส่งคืนผลลัพธ์โดยการเขียนแต่ละบรรทัดสำหรับเอาต์พุตมาตรฐาน
ยูทิลิตี้ grep เหมาะสำหรับไวยากรณ์นิพจน์สามแบบ สิ่งเหล่านี้สามารถระบุเป็น Basic, Extended หรือ Perl-compatible หากไม่มีการระบุไวยากรณ์นิพจน์ทั่วไป GNY grep จะตั้งค่ารูปแบบการค้นหาเป็นนิพจน์พื้นฐาน
Grep สำหรับหลายรูปแบบ
หากคุณต้องการค้นหาหลายรูปแบบ คุณสามารถใช้โอเปอเรเตอร์ OR ซึ่งเรียกว่าโอเปอเรเตอร์สำรอง โอเปอเรเตอร์/ไปป์นี้มีลักษณะดังนี้:|
ซึ่งจะทำให้ผู้ใช้สามารถระบุการจับคู่ที่เป็นไปได้ทั้งหมด ไม่ว่าจะเป็นชุดนิพจน์หรือสตริงตามตัวอักษร ดังนั้น เพื่อค้นหาหลายรูปแบบ อินพุตจะเป็น:
$ grep 'first pattern\|second pattern' filename
'รูปแบบแรก ' และ 'รูปแบบที่สอง ' จะถูกแทนที่ด้วยรูปแบบที่เป็นไปได้ที่คุณกำลังค้นหา นิพจน์ทั่วไปนี้ – ‘รูปแบบแรก\|รูปแบบที่สอง ' - ควรอยู่ในเครื่องหมายคำพูดเดี่ยวเสมอ สัญลักษณ์ไปป์ไม่ได้รับการสนับสนุนในฐานะโอเปอเรเตอร์สำรองและด้วยเหตุนี้การหลีกหนี (แบ็กสแลช ) ต้องใช้อักขระเพื่อบอกให้ grep สั่งไพพ์ต่างออกไป
เพื่อระบุรูปแบบที่ต้องการให้เป็นนิพจน์ทั่วไปแบบขยาย คำสั่ง ‘-e ' หรือ '—extended-regexp ' สามารถใช้ได้. ตัวอย่างเช่น:
$ grep -E 'first pattern|second pattern' filename
ใน regex เพิ่มเติม คุณไม่จำเป็นต้องออกจากไพพ์
คุณค้นหาตามไฟล์ได้ ดังนั้นการค้นหารูปแบบภายใน presentation.txt อาจมีลักษณะดังนี้:
$ grep -E 'first pattern|second pattern' presentation.txt
ผลลัพธ์จะแสดงสตริงที่คุณต้องการไฮไลต์
หากไฟล์ที่คุณกำลังค้นหาอยู่ภายในไดเร็กทอรีอื่น คุณจะต้องสั่งให้ grep ค้นหาในไดเร็กทอรีที่ระบุโดยใช้พาธไฟล์แบบเต็ม ตัวอย่างเช่น:
$ grep -E 'first pattern|second pattern' /home/presentation.txt
Grep สำหรับหลายสตริง
รูปแบบพื้นฐานที่สุดคือสตริงตามตัวอักษร หากต้องการค้นหาหลายสตริง คุณจะต้องป้อนค่าเหล่านี้หลังคำสั่ง grep ลองนึกภาพว่าเรากำลังค้นหา 'หนึ่ง ', 'สอง ' และ 'สาม '. อาจมีลักษณะดังนี้:
$ grep 'one\|two\|three'
ทำตาม คำสั่ง ด้วยไฟล์ที่คุณกำลังค้นหา หากคุณกำลังค้นหาโดยใช้นิพจน์ทั่วไปแบบขยาย คุณจะต้องลบ '\ '. ตัวอย่างเช่น:
$ grep -E 'one|two|three'
ละเว้นความละเอียดอ่อนของตัวพิมพ์เล็กและใหญ่
คำสั่ง 'grep' คำนึงถึงขนาดตัวพิมพ์ หากต้องการละเว้นตัวพิมพ์ใหญ่ ให้เรียกใช้ด้วย '-i ' หรือ '—ละเว้น-กรณี ' ตัวเลือก. ตัวอย่างเช่น:
$ grep -i 'one\|two\|three'
แสดงจำนวนการแข่งขันหลายนัด
หากคุณอยู่ในไฟล์บันทึกและต้องการทราบว่าจำนวนข้อความเตือนและข้อความแสดงข้อผิดพลาดเพิ่มขึ้นหรือไม่ แต่ไม่เห็นผลลัพธ์โดยละเอียด คุณสามารถใช้ '-c '. เพื่อนับการแข่งขันหลายรายการภายใน myapp.log ไฟล์อาจมีลักษณะดังนี้:
grep -c 'one\|two\|three' /var/log/myapp.log
Grep หลายรูปแบบในประเภทไฟล์เฉพาะ
สามารถค้นหาสตริงได้หลายแบบในไฟล์บางประเภท ซึ่งช่วยให้คุณสามารถค้นหา เช่น ไฟล์ข้อความทั้งหมดหรือไฟล์บันทึกทั้งหมดภายในไดเร็กทอรี การใช้เครื่องหมายดอกจันที่มีนามสกุลไฟล์แทนชื่อไฟล์จะเป็นคำสั่ง grep จากตัวอย่างข้างต้นสำหรับข้อความแสดงข้อผิดพลาด การดูไฟล์บันทึกทั้งหมดอาจมีลักษณะดังนี้:
grep -c 'one\|two\|three' /var/log/*.log
ค้นหาซ้ำหลายคู่
การใช้ grep จะค้นหาภายในไดเร็กทอรีปัจจุบันโดยใช้เครื่องหมายดอกจันเท่านั้น หากคุณต้องการรวมไดเรกทอรีย่อยทั้งหมด คุณสามารถใช้ตัวเลือก '-R':
grep -R 'one\|two\|three' /var/log/*.log
จากนั้นจะส่งคืนผลลัพธ์สำหรับไฟล์ทั้งหมดที่พบในไดเร็กทอรี var/log/ และไดเร็กทอรีย่อยที่ระบุ
การใช้ grep สำหรับการจับคู่แบบตรงทั้งหมด
คำสั่ง 'grep' จะแสดงผลลัพธ์ทั้งหมดที่มีการฝังสตริงด้วย ไม่ใช่แค่การจับคู่แบบตรงทั้งหมด ตัวอย่างเช่น เมื่อค้นหา 'value' จะพิมพ์บรรทัดที่มี 'values' และ 'valued' ด้วย หากคุณต้องการส่งคืนบรรทัดที่ตรงกันทั้งคำเท่านั้น คุณสามารถใช้ '-w ' หรือ '—word-regexp '. ซึ่งอาจมีลักษณะเช่นนี้ หากคุณกำลังค้นหารายการที่ตรงกันของ ‘หนึ่ง ', 'สอง ' และ 'สาม ':
$ grep -w 'one\|two\|three'
อักขระ Word จะประกอบด้วยตัวอักษรและตัวเลข ดังนั้น 0-9 และ a-z บวกกับเครื่องหมายขีดล่าง อื่นๆ จะถือว่าเป็นอักขระที่ไม่ใช่คำ