ทำความเข้าใจคำสั่ง 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
คำสั่งจะช่วยประหยัดเวลาได้อย่างแน่นอนหากใช้สำหรับการสแกนชุดข้อมูลขนาดใหญ่