Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธี Grep สำหรับคำ สตริง และรูปแบบหลายคำ

คู่มือนี้อธิบายวิธีใช้ 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 บวกกับเครื่องหมายขีดล่าง อื่นๆ จะถือว่าเป็นอักขระที่ไม่ใช่คำ