วิธีใช้คำสั่ง Grep ใน Linux [12 ตัวอย่างที่เป็นประโยชน์]
คุณเคยเผชิญกับงานที่ต้องค้นหาสตริงหรือรูปแบบเฉพาะในไฟล์แต่ไม่รู้ว่าจะเริ่มค้นหาจากที่ไหน? ถ้าอย่างนั้นนี่คือคำสั่ง grep เพื่อช่วยเหลือ!
grep คือเครื่องมือค้นหารูปแบบไฟล์ที่มีประสิทธิภาพซึ่งมาพร้อมกับทุกการกระจายของ Linux หากไม่ได้ติดตั้งไว้ในระบบของคุณไม่ว่าด้วยเหตุผลใดก็ตาม คุณสามารถติดตั้งได้อย่างง่ายดายผ่านตัวจัดการแพ็คเกจของคุณดังที่แสดง
sudo apt install grep [On Debian, Ubuntu and Mint]
sudo yum install grep [On RHEL/CentOS/Fedora and Rocky Linux/AlmaLinux]
sudo emerge -a sys-apps/grep [On Gentoo Linux]
sudo apk add grep [On Alpine Linux]
sudo pacman -S grep [On Arch Linux]
sudo zypper install grep [On OpenSUSE]
ฉันพบว่าวิธีที่ง่ายที่สุดในการทำให้เท้าของคุณเปียกด้วย คำสั่ง grep คือการดำดิ่งลงลึกและใช้ตัวอย่างในโลกแห่งความเป็นจริง
1. ค้นหาและค้นหาไฟล์ใน Linux
สมมติว่าคุณเพิ่งติดตั้ง Ubuntu ใหม่บนเครื่องของคุณ และคุณกำลังจะลองใช้สคริปต์ Python
คุณได้สำรวจเว็บเพื่อค้นหาบทช่วยสอน แต่คุณพบว่ามี Python ที่ใช้งานอยู่สองเวอร์ชัน และคุณไม่ทราบว่า Python เวอร์ชันใดถูกติดตั้งบน Ubuntu โดยผู้ติดตั้ง หรือ หากติดตั้งโมดูลใดๆ
เพียงรันคำสั่ง dpkg ต่อไปนี้ด้วย grep ดังที่แสดง:
dpkg -l | grep -i python
อันดับแรก เราใช้ dpkg –l
ซึ่งแสดงรายการแพ็คเกจ *.deb
ที่ติดตั้งบนระบบของคุณ ประการที่สอง เราได้ไพพ์เอาต์พุตนั้นไปที่ grep -i python
ซึ่งระบุเพียงว่า “ไปที่ grep แล้วกรองออก แล้วส่งคืนทุกสิ่งที่มี 'python’ อยู่ในนั้น ”
ตัวเลือก -i
มีไว้สำหรับละเว้นตัวพิมพ์ เนื่องจาก grep คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ การใช้ตัวเลือก -i
ถือเป็นนิสัยที่ดีในการเข้าถึง เว้นแต่ว่าคุณกำลังพยายามเจาะลึกการค้นหาที่เฉพาะเจาะจงมากขึ้น
2. ค้นหาและกรองไฟล์ใน Linux
grep ยังสามารถใช้เพื่อค้นหาและกรองภายในไฟล์แต่ละไฟล์หรือหลายไฟล์ก็ได้ ลองใช้สถานการณ์นี้:
คุณกำลังประสบปัญหากับ Apache Web Server ของคุณ และคุณได้ติดต่อกับฟอรัมที่ยอดเยี่ยมหลายแห่งบนอินเทอร์เน็ตเพื่อขอความช่วยเหลือ
ผู้ใจดีที่ตอบกลับคุณขอให้คุณโพสต์เนื้อหาของไฟล์ /etc/apache2/apache2.conf ของคุณ จะดีกว่าไหมสำหรับคุณ คนที่ช่วยคุณ และทุกคนที่อ่านมัน หากคุณสามารถลบบรรทัดที่แสดงความคิดเห็นทั้งหมดได้ คุณทำได้! เพียงแค่เรียกใช้สิ่งนี้:
grep -v ^\# /etc/apache2/apache2.conf | grep .
ตัวเลือก -v
บอกให้ grep กลับด้านเอาต์พุต ซึ่งหมายความว่าแทนที่จะพิมพ์บรรทัดที่ตรงกัน ให้ทำตรงกันข้ามและพิมพ์บรรทัดทั้งหมดที่ไม่ตรงกับนิพจน์ ในกรณีนี้ บรรทัดความคิดเห็น #
โปรดทราบว่าเรายังใช้ grep .
ในตอนท้ายเพื่อซ่อนเอาต์พุตของบรรทัดว่างทั้งหมด วิธีนี้เราจะเห็นเฉพาะการตั้งค่าในเทอร์มินัลของเราเท่านั้น
3. ค้นหาไฟล์ .mp3 ทั้งหมดใน Linux
grep มีประโยชน์มากสำหรับการกรองจาก stdout ตัวอย่างเช่น สมมติว่าคุณมีทั้งโฟลเดอร์ที่เต็มไปด้วยไฟล์เพลงในรูปแบบที่แตกต่างกันมากมาย
คุณต้องการค้นหาไฟล์ *.mp3
ทั้งหมดจากศิลปิน JayZ แต่คุณไม่ต้องการแทร็กที่รีมิกซ์ใดๆ การใช้ คำสั่ง find กับไพพ์ grep สองสามรายการจะช่วยได้:
find . -name “*.mp3” | grep –i JayZ | grep –vi “remix”
ในตัวอย่างนี้ เราใช้ find เพื่อพิมพ์ไฟล์ทั้งหมดที่มีนามสกุล *.mp3
โดยไพพ์ไปที่ grep –i
เพื่อกรอง ออกและพิมพ์ไฟล์ทั้งหมดด้วยชื่อ “JayZ ” จากนั้นไปป์อื่นไปที่ grep –vi
ซึ่งจะกรองออกและไม่พิมพ์ชื่อไฟล์ทั้งหมดด้วยสตริง (ไม่ว่าในกรณีใด) “รีมิกซ์ ”
4. แสดงจำนวนบรรทัดก่อนหรือหลังสตริงการค้นหา
อีกสองสามตัวเลือกคือสวิตช์ -A
และ -B
ซึ่งแสดงบรรทัดที่ตรงกันและจำนวนบรรทัดที่อยู่ก่อนหรือหลังสตริงการค้นหา
แม้ว่า man page จะให้คำอธิบายที่ละเอียดกว่า แต่ฉันพบว่าวิธีที่ง่ายที่สุดในการจำตัวเลือกต่างๆ ได้แก่ -A
=after และ -B
=< แข็งแกร่ง>ก่อน:
ifconfig | grep -A 4 inet
ifconfig | grep -B 2 UP
5. พิมพ์จำนวนบรรทัดรอบการแข่งขัน
ตัวเลือก -C
ของ grep นั้นคล้ายกัน แต่แทนที่จะพิมพ์บรรทัดที่อยู่ก่อนหรือหลังสตริง กลับพิมพ์บรรทัดในทิศทางใดทิศทางหนึ่ง:
ifconfig | grep -C 2 lo
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 15314 bytes 1593769 (1.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
6. นับจำนวนการแข่งขัน
คล้ายกับการไพพ์สตริง grep ตามจำนวนคำ (คำสั่ง wc) ตัวเลือกในตัวของ grep ก็สามารถดำเนินการเช่นเดียวกันกับคุณ:
ifconfig | grep -c inet6
7. ค้นหาไฟล์ตามที่กำหนดสตริงใน Linux
ตัวเลือก –n
สำหรับ grep มีประโยชน์มากเมื่อทำการดีบักไฟล์ระหว่างเกิดข้อผิดพลาดในการคอมไพล์ จะแสดงหมายเลขบรรทัดในไฟล์ของสตริงการค้นหาที่กำหนด:
grep -n "main" setup.py
8. ค้นหาสตริงแบบเรียกซ้ำในทุกไดเร็กทอรี
หากคุณต้องการค้นหาสตริงในไดเรกทอรีปัจจุบันพร้อมกับไดเรกทอรีย่อยทั้งหมด คุณสามารถระบุตัวเลือก –r
เพื่อค้นหาแบบวนซ้ำ:
grep -r “function” *
9. ค้นหารูปแบบทั้งหมด
การส่งผ่านตัวเลือก -w
เพื่อ grep ค้นหารูปแบบทั้งหมดที่อยู่ในสตริง ตัวอย่างเช่น การใช้:
ifconfig | grep -w "RUNNING"
จะพิมพ์บรรทัดที่มีรูปแบบออกมาในเครื่องหมายคำพูด ในทางกลับกัน หากคุณลอง:
ifconfig | grep -w "RUN"
จะไม่มีอะไรส่งคืนเนื่องจากเราไม่ได้ค้นหารูปแบบ แต่เป็นทั้งคำ
10. ค้นหาสตริงในไฟล์ Gzipped
สิ่งที่สมควรกล่าวถึงคืออนุพันธ์ของ grep อย่างแรกคือ zgrep ซึ่งคล้ายกับ zcat มีไว้สำหรับใช้กับไฟล์ gzipped ใช้ตัวเลือกเดียวกันกับ grep และใช้ในลักษณะเดียวกัน:
zgrep -i error /var/log/syslog.2.gz
11. จับคู่นิพจน์ทั่วไปในไฟล์
คำสั่ง egrep เป็นอีกหนึ่งอนุพันธ์ที่ย่อมาจาก “Extensed Global Regular Expression ” จดจำอักขระเมตานิพจน์เพิ่มเติมเช่น at + ? |
และ ()
คำสั่ง egrep มีประโยชน์มากสำหรับการค้นหาไฟล์ต้นฉบับและโค้ดอื่นๆ หากจำเป็น สามารถเรียกใช้จาก grep ปกติโดยการระบุตัวเลือก -E
grep -E
12. ค้นหาสตริงรูปแบบคงที่
คำสั่ง fgrep ค้นหาไฟล์หรือรายการไฟล์เพื่อหาสตริงรูปแบบคงที่ มันเหมือนกับ grep -F
วิธีทั่วไปในการใช้ fgrep คือการส่งไฟล์รูปแบบไปให้:
fgrep –f file_full_of_patterns.txt file_to_search.txt
นี่เป็นเพียงจุดเริ่มต้นกับ grep แต่อย่างที่คุณเห็นแล้วว่าสิ่งนี้มีค่ามากสำหรับวัตถุประสงค์ที่หลากหลาย นอกเหนือจากคำสั่งบรรทัดเดียวง่ายๆ ที่เรานำมาใช้แล้ว grep ยังสามารถใช้เพื่อเขียนงาน cron ที่มีประสิทธิภาพ และ เชลล์สคริปต์ ที่มีประสิทธิภาพสำหรับ เริ่ม.
ใช้ความคิดสร้างสรรค์ ทดลองใช้ตัวเลือกต่างๆ ใน man page และสร้าง นิพจน์ grep ที่เหมาะกับวัตถุประสงค์ของคุณเอง!