วิธีใช้คำสั่ง Grep ใน Linux

ทำความเข้าใจคำสั่ง grep พร้อมตัวอย่างที่ใช้งานได้จริงเพื่อกรองและแสดงเนื้อหาไฟล์อย่างง่ายดาย

GREP ย่อมาจาก 'Global Regular Expression Print' เป็นยูทิลิตี้บรรทัดคำสั่งที่มีประโยชน์ซึ่งจัดเตรียมโดย Linux เพื่อค้นหาบรรทัดข้อความที่ตรงกับรูปแบบที่ผู้ใช้ให้มา

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

มันทำงานได้ดีมากโดยการกรองเนื้อหาของไฟล์ทำให้งานของเราง่ายขึ้นในการค้นหาเนื้อหาเฉพาะในไฟล์เดียวหรือหลายไฟล์พร้อมกัน

ในบทความนี้ ให้เราทบทวนการทำงานของ grep คำสั่งพร้อมตัวอย่างเชิงปฏิบัติโดยละเอียด

ตัวเลือกที่ใช้ได้กับ grep สั่งการ

นี่คือตัวเลือกพื้นฐานบางส่วนที่คุณจะใช้กับ grep สั่งการ.

ตัวเลือกคำอธิบาย
-ผมสำหรับการค้นหาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
-rหากต้องการค้นหาไฟล์ทั้งหมดในไดเร็กทอรีที่ระบุและไดเร็กทอรีย่อยซ้ำๆ
-คเพื่อแสดงจำนวนครั้งที่สตริงปรากฏขึ้น
-vเพื่อแสดงเส้นที่ไม่ตรงกัน
-wกรองคำเฉพาะที่ใช้แยกกัน

ใช้ grep สั่งการ

grep คำสั่งมักจะใช้กับไพพ์ (|) คุณประโยชน์. สามารถใช้กับเชลล์ไพพ์ได้เมื่อคุณต้องการใช้กับคำสั่ง Linux อื่นๆ แม้ว่า, grep สามารถใช้แยกกันได้โดยไม่ต้องใช้ท่อ (|) คุณประโยชน์.

ให้เราดูไวยากรณ์พื้นฐานของ grep คำสั่งที่มีและไม่มียูทิลิตี้ไพพ์

อันดับแรก ให้ฉันแสดงไฟล์ข้อความตัวอย่างที่ฉันจะแสดงให้คุณเห็นก่อน grep สั่งการ.

อินเดียเป็นประเทศที่สวยงามของคนที่รักความสงบ อินเดียตั้งอยู่บนเสาหลักสามประการของฝ่ายนิติบัญญัติ ฝ่ายบริหาร และฝ่ายตุลาการ อินเดียเป็นประเทศที่สวยงามของคนที่รักสันติภาพ อินเดียห่วงใยประชาชน เนื่องจากเป็นทรัพยากรที่ให้ความสำคัญกับพิกัดคาร์ทีเซียนทั้งหมด ต่อไปนี้เป็นสองบรรทัดว่าง การใช้เกวียนเกวียนเป็นเรื่องธรรมดาในหมู่บ้านเพื่อทำงานบ้านไร่ นี่คือจุดสิ้นสุดของไฟล์ตัวอย่าง

grep ใช้กับท่อ ( | )คุณประโยชน์

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

ไวยากรณ์:

[คำสั่ง] | grep [สตริง]

ตัวอย่าง:

cat sample.txt | สภานิติบัญญัติ grep

ที่นี่ฉันได้ใช้ แมว คำสั่งเพื่อแสดงบางบรรทัดจากไฟล์ 'sample.txt' เฉพาะบรรทัดเหล่านั้นเท่านั้นที่จะแสดงซึ่งมีคำว่า 'สภานิติบัญญัติ' อยู่ในนั้นและไม่ต้องสนใจบรรทัดที่เหลือ

เอาท์พุต:

gaurav@ubuntu:~/workspace$ cat sample.txt | grep legislature india ตั้งอยู่บนเสาหลักสามประการของฝ่ายนิติบัญญัติ ฝ่ายบริหาร และฝ่ายตุลาการ gaurav@ubuntu:~/workspace$

grep ใช้โดยไม่มีท่อ ( | )คุณประโยชน์

grep สามารถใช้เป็นคำสั่งเดี่ยวได้โดยตรงโดยไม่ต้องใช้ไพพ์ ( | ) คุณประโยชน์.

ไวยากรณ์:

grep [string_to_be_searched] [ชื่อไฟล์]

ตัวอย่าง:

grep อินเดีย sample.txt

เอาท์พุต:

อินเดียเป็นประเทศที่สวยงามของคนที่รักสันติภาพ อินเดียห่วงใยประชาชนเพราะเป็นทรัพยากร

ดังนั้นฉันจึงใช้ grep คำสั่งโดยตรงเพื่อกรองบรรทัดที่มีสตริง 'อินเดีย' จากไฟล์ข้อความ 'sample.txt'

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

ลินุกซ์จะระมัดระวังอย่างมากเกี่ยวกับความละเอียดอ่อนของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่เมื่อเราสั่งงานบนเทอร์มินัล สิ่งนี้ต้องการให้ผู้ใช้ระมัดระวังเกี่ยวกับกรณีของสตริงที่ใส่ลงในคำสั่ง

ให้เราดูสิ่งนี้ผ่านตัวอย่าง

grep สันติภาพ sample.txt

ในกรณีนี้ เราจะไม่ได้รับผลลัพธ์เนื่องจากไม่มีคำว่า "สันติภาพ" ในไฟล์ตัวอย่าง เรามีคำว่า 'สันติภาพ' ด้วยตัวพิมพ์ใหญ่ 'P' คำก็เหมือนกันแต่เมื่อเราใช้ grep คำสั่งโดยไม่มีตัวเลือกใด ๆ จะค้นหาการจับคู่ที่ตรงกันในไฟล์โดยไม่คำนึงถึงการเปลี่ยนแปลงใด ๆ ในตัวพิมพ์เล็ก

เพื่อหลีกเลี่ยงความกำกวมนี้ คุณสามารถใช้เครื่องหมาย -ผม ตัวเลือกที่บอกตามตัวอักษร grep สั่งการ “ลืมกรณีที่ฉันใส่สตริงเข้าไป และเพียงแค่ค้นหารูปแบบที่ตรงกันทั้งหมดในไฟล์”

ไวยากรณ์:

grep -i [สตริง] [ชื่อไฟล์]

ตัวอย่าง:

grep -i ตัวอย่างสันติภาพ.txt

เอาท์พุต:

อินเดียเป็นประเทศที่สวยงามของคนที่รักความสงบ อินเดียเป็นประเทศที่สวยงามของคนที่รักสันติภาพ

บรรทัดที่ตรงกันทั้งหมดจะแสดงโดยไม่คำนึงถึงกรณีที่เป็นสตริงที่ตรงกัน

ค้นหาซ้ำโดยใช้ grep สั่งการ

ดิ -r ตัวเลือกจะค้นหาไฟล์ทั้งหมดในไดเร็กทอรีและไดเร็กทอรีย่อยทั้งหมดที่ตรงกับรูปแบบสตริงที่ผู้ใช้ระบุในคำสั่ง

ไวยากรณ์:

grep -i -r [สตริง] [file_path]

ตัวอย่าง:

grep -i -r แมวตัวผู้ /home/gaurav/workspace

สตริงที่นี่คือ 'tomcat' และจะถูกค้นหาในพื้นที่ทำงานของไดเร็กทอรี ไดเร็กทอรีย่อยและไฟล์ทั้งหมดในไดเร็กทอรี "เวิร์กสเปซ" จะถูกสแกนเพื่อให้ตรงกับรูปแบบสตริงที่มีให้

เอาท์พุต:

./context_log.policy:// catalina.policy - สิทธิ์นโยบายความปลอดภัยสำหรับ Tomcat 7 ./context_log.policy:// หมายเหตุ: หาก tomcat-juli.jar อยู่ใน ${catalina.base} และไม่ใช่ ${catalina.home }, ./context_log.policy:// ให้ codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..} ./context_log.policy:grant codeBase "file:${catalina.home }/bin/tomcat-juli.jar" { ./context_log.policy: อนุญาต java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server"; ./context.xml: ./catalina.properties:# - Tomcat Bootstrap JARs ./catalina.properties:# - Tomcat API JAR ./catalina.properties:# - Tomcat JARs ./catalina.properties:# - ทั่วไปที่ไม่ใช่ Tomcat JARs ./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar ./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true ./catalina.properties:# tomcat.util.buf.StringCache.char.enabled=true ./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500,000 ./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000 /server.xml: pathname="conf/tomcat-users.xml" /> ./server.xml: 

บันทึก: ในขณะที่ใช้ -r ตัวเลือกด้วย grep คำสั่งเราต้องระบุเส้นทางของไฟล์ไม่ใช่ชื่อไฟล์

ค้นหาทั้งคำเท่านั้นด้วย grep สั่งการ

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

งงกับเรื่องนี้? ไม่ต้องกังวล จะเข้าใจได้ง่ายขึ้นมากเมื่อคุณได้รับตัวอย่าง

ตัวอย่าง:

ที่นี่ ฉันต้องการค้นหาคำว่า 'cart' แต่ละคำ และแสดงบรรทัดทั้งหมดที่ตรงกับคำนี้ในไฟล์ 'sample.txt'

grep -i รถเข็น sample.txt

เอาท์พุต:

คาร์ทีเซียนพิกัดความสำคัญของพิกัดคาร์ทีเซียนทั้งหมด การใช้เกวียนวัวเป็นสิ่งที่พบเห็นได้ทั่วไปในหมู่บ้านเพื่อทำงานบ้าน เกวียนหายไปเมื่อเด็กชายปล่อยมันไป

ในผลลัพธ์ คุณสามารถสังเกตได้ว่าคำว่า 'คาร์ทีเซียน' มีคำว่า 'รถเข็น' ด้วย ดังนั้น เส้นที่มีคำว่า 'คาร์ทีเซียน' จะปรากฏขึ้นด้วย แม้ว่าเราจะไม่ต้องการให้แสดงก็ตาม

คุณสามารถใช้ -w ตัวเลือกด้วย grep คำสั่งเพื่อแก้ไขความคลุมเครือนี้

ไวยากรณ์:

grep -i -w [สตริง] [ชื่อไฟล์]

ตัวอย่าง:

grep -i -w cart sample.txt

เอาท์พุต:

การใช้เกวียนเกวียนเป็นเรื่องธรรมดาในหมู่บ้านเพื่อทำงานบ้านไร่ เกวียนหายไปเมื่อเด็กชายปล่อยมันไว้ 

ตอนนี้เมื่อคุณได้ใช้-w ตัวเลือกด้วย grep คุณจะได้รับเฉพาะบรรทัดที่ใช้คำว่า 'รถเข็น' โดยรวม

กลับการค้นหาโดยใช้ grep สั่งการ

grep คำสั่งยังสามารถใช้ในแบบย้อนกลับได้ เราสามารถใช้ grep คำสั่งตรงข้ามโดยซ่อนบรรทัดที่ตรงกันและแสดงเฉพาะบรรทัดที่ไม่พบการจับคู่ คุณสามารถทำได้โดยใช้ -v ตัวเลือกด้วย grep สั่งการ.

ไวยากรณ์:

grep -i -v [สตริง] [ชื่อไฟล์]

ตัวอย่าง:

grep -i -v ทรัพยากร sample.txt

เอาท์พุต:

อินเดียเป็นประเทศที่สวยงามของคนที่รักความสงบ อินเดียตั้งอยู่บนเสาหลักสามประการของฝ่ายนิติบัญญัติ ฝ่ายบริหาร และฝ่ายตุลาการ อินเดียเป็นประเทศที่สวยงามของคนที่รักสันติภาพ พิกัดคาร์ทีเซียนความสำคัญของพิกัดคาร์ทีเซียนทั้งหมด การใช้เกวียนเกวียนเป็นเรื่องธรรมดาในหมู่บ้านเพื่อทำงานบ้านไร่ นี่คือจุดสิ้นสุดของไฟล์ตัวอย่าง

ในผลลัพธ์ บรรทัดอื่น ๆ ทั้งหมดจะแสดงนอกเหนือจากบรรทัดที่มีคำว่า 'ทรัพยากร'

การนับจำนวนครั้งของสตริงที่ตรงกัน

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

ไวยากรณ์:

grep -i -c [สตริง] [ชื่อไฟล์]

ตัวอย่าง:

grep -i -c อินเดีย sample.txt

เอาท์พุต:

gaurav@ubuntu:~/workspace$ grep -i -c india sample.txt 4 gaurav@ubuntu:~/workspace$

ในที่นี้ ผลลัพธ์คือตัวเลขซึ่งเป็นจำนวนครั้งของคำว่า 'อินเดีย' ในไฟล์ sample.txt

บันทึก: ฉันได้ใช้ -ผม ตัวเลือกในทุกตัวอย่างเพื่อความปลอดภัยกับปัญหาความอ่อนไหวของตัวพิมพ์ ในกรณีที่คุณแน่ใจเกี่ยวกับกรณีของคำที่คุณกำลังค้นหา คุณสามารถข้าม . ได้อย่างปลอดภัย -ผม ตัวเลือก.

บทสรุป

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