ตัวอย่างการใช้คำสั่ง grep Linux

บทนำ

คำสั่ง grep Linux ใช้เป็นวิธีการกรองข้อมูลเข้า

GREP ย่อมาจาก Global Regular Expression Printer และดังนั้นเพื่อที่จะใช้งานได้อย่างมีประสิทธิภาพคุณควรมีความรู้เกี่ยวกับการแสดงออกปกติ

ในบทความนี้ฉันจะแสดงตัวอย่างซึ่งจะช่วยให้คุณเข้าใจคำสั่ง grep

01 จาก 09

วิธีค้นหาสตริงในไฟล์โดยใช้ GREP

คำสั่ง grep Linux

ลองนึกภาพคุณมีไฟล์ข้อความที่เรียกว่าหนังสือที่มีชื่อหนังสือเด็ก ๆ ต่อไปนี้:

หากต้องการค้นหาหนังสือทั้งหมดที่มีคำว่า "The" ในชื่อหนังสือคุณจะต้องใช้ไวยากรณ์ต่อไปนี้:

grep หนังสือ

ผลลัพธ์ต่อไปนี้จะได้รับการคืน:

ในแต่ละกรณีคำว่า "The" จะถูกเน้น

โปรดทราบว่าการค้นหาเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ดังนั้นถ้าหนึ่งในชื่อมี "the" แทน "The" แล้วจะไม่มีการส่งคืน

หากไม่สนใจกรณีที่คุณสามารถเพิ่มสวิตช์ต่อไปนี้:

grep หนังสือ - กรณีที่ได้รับอนุมัติ

นอกจากนี้คุณยังสามารถใช้สวิตช์ -i ดังนี้:

grep -i หนังสือ

02 จาก 09

ค้นหาสตริงในไฟล์ที่ใช้สัญลักษณ์แทน

คำสั่ง grep มีประสิทธิภาพมาก คุณสามารถใช้เทคนิคการจับคู่รูปแบบต่างๆเพื่อกรองผลลัพธ์

ในตัวอย่างนี้เราจะแสดงวิธีค้นหาสตริงในไฟล์โดยใช้ สัญลักษณ์แทน

ลองนึกภาพคุณมีไฟล์ที่เรียกว่าสถานที่ที่มีชื่อสถานที่สกอตแลนด์ต่อไปนี้:

อเบอร์ดีน

Aberystwyth

Aberlour

Inverurie

อินเวอร์เนส

นิว

กวางตัวใหม่

Galloway ใหม่

กลาสโกว์

เอดินเบอระ

ถ้าคุณต้องการหาสถานที่ทั้งหมดที่มี inver ในชื่อใช้ไวยากรณ์ต่อไปนี้:

grep inver * places

เครื่องหมายดอกจัน (*) หมายถึง 0 หรือหลาย ดังนั้นถ้าคุณมีที่เรียกว่า inver หรือที่เรียกว่า inverness แล้วทั้งสองจะถูกส่งกลับ

สัญลักษณ์ตัวแทนอื่นที่คุณสามารถใช้คือช่วง (.) คุณสามารถใช้ตัวเลือกนี้เพื่อให้ตรงกับตัวอักษรตัวเดียว

สถานที่ inver.r grep

คำสั่งข้างต้นจะหาสถานที่ที่เรียกว่า inverurie และ inverary แต่จะไม่พบความเป็นตัวตนเพราะมีเพียงสัญลักษณ์เดียวระหว่าง r สองเท่าที่ระบุไว้ในช่วงเวลาเดียว

สัญลักษณ์ประจำงวดเป็นประโยชน์ แต่อาจทำให้เกิดปัญหาได้หากคุณมีข้อความค้นหาเป็นส่วนหนึ่งของข้อความที่คุณกำลังค้นหา

ตัวอย่างเช่นดูที่รายการชื่อโดเมนนี้

หากต้องการค้นหา about.com ทั้งหมดทั้งหมดที่คุณสามารถค้นหาโดยใช้ไวยากรณ์ต่อไปนี้:

grep * เกี่ยวกับ * domainnames

คำสั่งดังกล่าวจะล้มลงถ้ารายการมีชื่อต่อไปนี้:

คุณสามารถลองใช้ไวยากรณ์ต่อไปนี้:

grep * about.com domainnames

นี้จะทำงานได้จนกว่าจะมีโดเมนที่มีชื่อต่อไปนี้:

aboutycom.com

ในการค้นหาคำ about.com โดยประมาณคุณจะต้องหลีกเลี่ยงจุดดังนี้:

grep * เกี่ยวกับ \ .com domainnames

สัญลักษณ์แทนสุดท้ายที่จะแสดงให้คุณเห็นคือเครื่องหมายคำถามซึ่งหมายถึงอักขระ 0 หรืออักขระหนึ่งตัว

ตัวอย่างเช่น:

grep? ber placenames

คำสั่งดังกล่าวจะกลับคืนมาเป็นปกติ aberthent หรือ berwick

03 จาก 09

ค้นหาสตริงที่จุดเริ่มต้นและจุดสิ้นสุดของบรรทัดโดยใช้ grep

สัญลักษณ์กะรัต (^) และดอลลาร์ ($) ช่วยให้คุณค้นหารูปแบบที่จุดเริ่มต้นและจุดสิ้นสุดของเส้น

ลองนึกภาพคุณมีไฟล์ชื่อฟุตบอลที่มีชื่อทีมต่อไปนี้:

ถ้าคุณต้องการหาทีมงานทั้งหมดที่ขึ้นต้นด้วยแมนเชสเตอร์คุณจะใช้ไวยากรณ์ต่อไปนี้:

grep ^ ทีมแมนเชสเตอร์

คำสั่งดังกล่าวจะส่งผลให้ Manchester City และ Manchester United ไม่ได้เป็น FC United Of Manchester

หรือคุณสามารถหาทีมงานทั้งหมดที่ลงท้ายด้วย United โดยใช้ไวยากรณ์ต่อไปนี้:

grep United $ teams

คำสั่งดังกล่าวจะส่งผลให้ Manchester United และ Newcastle United ไม่ได้เป็น FC United Of Manchester

04 จาก 09

การนับจำนวนการจับคู่โดยใช้ grep

ถ้าคุณไม่ต้องการส่งคืนบรรทัดจริงที่ตรงกับรูปแบบโดยใช้ grep แต่คุณเพียงแค่ต้องการทราบว่ามีกี่วิธีที่คุณสามารถใช้ไวยากรณ์ต่อไปนี้:

grep -c pattern inputfile

หากรูปแบบถูกจับคู่กันสองครั้งจะมีการส่งคืนหมายเลข 2

05 จาก 09

ค้นหาข้อกำหนดทั้งหมดที่ไม่ตรงกันโดยใช้ grep

ลองนึกภาพคุณมีรายชื่อสถานที่กับประเทศที่ระบุไว้ดังนี้:

คุณอาจสังเกตเห็นว่าอ่าว colwyn ไม่มีประเทศที่เกี่ยวข้อง

หากต้องการค้นหาสถานที่ทั้งหมดในประเทศที่คุณสามารถใช้ไวยากรณ์ต่อไปนี้:

grep land $ places

ผลลัพธ์ที่ได้จะเป็นทุกสถานที่ยกเว้น colwyn bay

สิ่งนี้เห็นได้ชัดว่าใช้ได้เฉพาะกับสถานที่ที่ลงท้ายด้วยที่ดิน (ไม่ค่อยวิทยาศาสตร์)

คุณสามารถกลับไปเลือกใช้ไวยากรณ์ต่อไปนี้:

grep -v ที่ดิน $ places

นี้จะหาสถานที่ทั้งหมดที่ไม่ได้จบลงด้วยที่ดิน

06 จาก 09

วิธีการค้นหาบรรทัดว่างในไฟล์โดยใช้ grep

ลองนึกภาพคุณมีไฟล์ข้อมูลที่ใช้โดยแอพพลิเคชั่นของบุคคลที่สามซึ่งจะหยุดอ่านไฟล์เมื่อพบบรรทัดว่างดังต่อไปนี้:

เมื่อแอพพลิเคชันไปที่บรรทัดหลังจากที่ liverpool มันจะหยุดอ่าน colwyn bay ความหมายจะพลาดอย่างสิ้นเชิง

คุณสามารถใช้ grep เพื่อค้นหาบรรทัดว่างด้วยไวยากรณ์ต่อไปนี้:

สถานที่ grep ^ $

แต่น่าเสียดายที่นี่ไม่ได้เป็นประโยชน์เพราะมันจะส่งกลับค่าว่างเปล่า

แน่นอนคุณสามารถนับจำนวนบรรทัดว่างเป็นเช็คเพื่อดูว่าไฟล์ถูกต้องหรือไม่ดังนี้

สถานที่ grep -c ^ $

อย่างไรก็ตามคุณควรทราบหมายเลขบรรทัดที่มีบรรทัดว่างเปล่าเพื่อให้คุณสามารถแทนที่ได้ คุณสามารถทำได้โดยใช้คำสั่งต่อไปนี้:

สถานที่ grep-n ^ $

07 จาก 09

วิธีการค้นหาสตริงของอักขระตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กโดยใช้ grep

ใช้ grep คุณสามารถกำหนดว่าบรรทัดใดในไฟล์มีอักขระตัวพิมพ์ใหญ่โดยใช้ไวยากรณ์ต่อไปนี้:

grep '[AZ]' ชื่อไฟล์

วงเล็บเหลี่ยม [] ช่วยให้คุณสามารถกำหนดช่วงของอักขระได้ ในตัวอย่างข้างต้นจะตรงกับตัวอักษรที่อยู่ระหว่าง A และ Z

ดังนั้นเพื่อให้ตรงกับตัวพิมพ์เล็กคุณสามารถใช้ไวยากรณ์ต่อไปนี้:

grep 'ชื่อไฟล์ [az]'

ถ้าคุณต้องการให้ตรงกับตัวอักษรเท่านั้นไม่ใช่ตัวเลขหรือสัญลักษณ์อื่น ๆ คุณสามารถใช้ไวยากรณ์ต่อไปนี้:

grep '[a-zA-Z]' ชื่อไฟล์

คุณสามารถทำเช่นเดียวกันกับตัวเลขดังนี้:

grep '[0-9]' ชื่อไฟล์

08 จาก 09

กำลังมองหารูปแบบการทำซ้ำโดยใช้ grep

คุณสามารถใช้วงเล็บปีกกา {} เพื่อค้นหารูปแบบการทำซ้ำ

ลองนึกภาพคุณมีไฟล์ที่มีหมายเลขโทรศัพท์ดังนี้:

คุณรู้ว่าส่วนแรกของตัวเลขต้องเป็นตัวเลขสามหลักและคุณต้องการหาเส้นที่ไม่ตรงกับรูปแบบนี้

จากตัวอย่างก่อนหน้านี้คุณรู้ว่า [0-9] จะส่งคืนตัวเลขทั้งหมดในไฟล์

ในกรณีนี้เราต้องการให้บรรทัดที่เริ่มต้นด้วยตัวเลขสามตัวตามด้วยยัติภังค์ (-) คุณสามารถดำเนินการดังกล่าวด้วยไวยากรณ์ต่อไปนี้:

grep "^ [0-9] [0-9] [0-9] -" ตัวเลข

ดังที่เราทราบจากตัวอย่างก่อนหน้ากะรัต (^) หมายความว่าบรรทัดต้องเริ่มต้นด้วยรูปแบบต่อไปนี้

[0-9] จะค้นหาหมายเลขใด ๆ ระหว่าง 0 ถึง 9 เนื่องจากเป็นการรวมสามครั้งที่ตรงกับ 3 หมายเลข ในที่สุดมียัติภังค์เพื่อแสดงว่ายัติภังค์ต้องประสบความสำเร็จสามหมายเลข

การใช้วงเล็บปีกกาช่วยให้การค้นหามีขนาดเล็กลงดังนี้

grep "^ [0-9] \ {3 \} -" ตัวเลข

เครื่องหมายสแลชจะหนีออกจาก {วงเล็บเพื่อให้ทำงานได้เป็นส่วนหนึ่งของนิพจน์ทั่วไป แต่ในสาระสำคัญว่านี่คืออะไร [0-9] {3} ซึ่งหมายถึงตัวเลขระหว่าง 0 ถึง 9 สามครั้ง

วงเล็บปีกกายังสามารถใช้เป็นดังนี้:

{5,10}

{5}

อักขระ {5,10} หมายความว่าตัวอักษรที่ถูกค้นหาต้องทำซ้ำอย่างน้อย 5 ครั้ง แต่ไม่เกิน 10 ในขณะที่ {5} หมายถึงต้องทำซ้ำตัวอักษรอย่างน้อย 5 ครั้ง แต่อาจมากกว่าอักขระนั้น

09 จาก 09

ใช้ผลลัพธ์จากคำสั่งอื่น ๆ โดยใช้ grep

จนถึงปัจจุบันเราได้ตรวจสอบรูปแบบการจับคู่ภายในไฟล์แต่ละไฟล์ แต่ grep สามารถใช้เอาต์พุตจากคำสั่งอื่น ๆ เป็น input สำหรับการจับคู่รูปแบบ

ตัวอย่างที่ดีของเรื่องนี้คือใช้คำสั่ง ps ที่แสดงกระบวนการที่ใช้งานอยู่

เช่นเรียกใช้คำสั่งต่อไปนี้:

ps -ef

กระบวนการทำงานทั้งหมดในระบบของคุณจะปรากฏขึ้น

คุณสามารถใช้ grep เพื่อค้นหากระบวนการทำงานที่เฉพาะเจาะจงดังต่อไปนี้

ps -ef | grep firefox

สรุป

คำสั่ง grep เป็นคำสั่งพื้นฐานของ Linux และเป็นคำแนะนำที่คุ้มค่าแก่การเรียนรู้เนื่องจากจะทำให้ชีวิตของคุณง่ายขึ้นเมื่อค้นหาไฟล์และกระบวนการต่างๆเมื่อใช้ terminal