Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีค้นหาคำเฉพาะในไฟล์บน Linux

วิธีค้นหาคำเฉพาะในไฟล์บน Linux

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

การใช้ grep เพื่อค้นหาคำเฉพาะในไฟล์

วิธีค้นหาคำเฉพาะในไฟล์บน Linux

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

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

grep -Rw '/path/to/search/' -e 'pattern'

-R ตั้งค่าสถานะ grep เป็นโหมดเรียกซ้ำ โดยนำทางผ่านไดเร็กทอรีทั้งหมดที่อยู่ในไดเร็กทอรีที่ระบุ -w ตั้งค่าสถานะค้นหาการจับคู่ทั้งคำ ซึ่งหมายความว่า 'สีแดง' จะจับคู่เฉพาะ 'สีแดง' ที่ล้อมรอบด้วยอักขระช่องว่างและไม่ 'ซ้ำซ้อน' หรือ 'เหนื่อย' -e ธงนำหน้ารูปแบบที่จะค้นหา รองรับนิพจน์ทั่วไปตามค่าเริ่มต้น

เพื่อเพิ่มความเร็ว grep คุณสามารถใช้ --exclude และ --include แฟล็กเพื่อจำกัดการค้นหาเฉพาะไฟล์บางประเภท ตัวอย่างเช่น --exclude=*.csv จะไม่ค้นหาภายในไฟล์ใดๆ ที่มีนามสกุล .csv --include=*.txt ในทางกลับกัน จะค้นหาภายในไฟล์ที่มีนามสกุล .txt เท่านั้น คุณสามารถเพิ่มแฟล็กได้ทันทีหลังจากคำสั่ง grep ดังที่แสดงด้านล่าง:

grep --exclude=*.csv -Rw '/path/to/search' -e 'pattern'

คุณยังสามารถยกเว้นไดเร็กทอรีที่ระบุโดยทำตามรูปแบบด้านล่าง:

grep --exclude-dir={dir1,dir2,*_old} -Rw '/path/to/search' -e 'pattern'

คำสั่งนี้จะไม่ค้นหาในไดเร็กทอรีใด ๆ ในไดเร็กทอรีการทำงานปัจจุบันที่ชื่อ dir1, dir2 หรือจับคู่รูปแบบ *_old ลบออกจากกระบวนการค้นหา มันจะดำเนินการค้นหาการจับคู่แบบเรียกซ้ำแบบเต็มคำที่ระบุในไฟล์อื่น ๆ ทั้งหมดในไดเร็กทอรีการทำงานปัจจุบัน

การใช้ find เพื่อค้นหาคำเฉพาะในไฟล์

วิธีค้นหาคำเฉพาะในไฟล์บน Linux

ในขณะที่ find ไวยากรณ์ของคำสั่งนั้นซับซ้อนกว่า grep บางคนชอบมัน

find . -name "*.php" -exec grep "pattern" {} \;

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

โปรดทราบว่า find จะดูที่ชื่อไฟล์เท่านั้น ไม่ใช่เนื้อหา นั่นเป็นเหตุผลที่ต้องใช้ grep ในการค้นหาข้อความและเนื้อหาของไฟล์ แฟล็ก grep ปกติควรใช้งานได้อย่างสมบูรณ์จากภายใน -exec ธง.

การใช้ ack เพื่อค้นหาคำเฉพาะในไฟล์

คำสั่ง ack น่าจะเป็นเครื่องมือค้นหาที่เร็วที่สุด แต่ไม่ได้รับความนิยมเท่ากับตัวเลือกด้านบน คำสั่งด้านล่างจะค้นหาภายในไดเร็กทอรีปัจจุบัน

ack 'pattern'

หากคุณต้องการค้นหาภายในไฟล์หรือไดเร็กทอรีที่เจาะจง คุณสามารถผนวกไฟล์นั้นหรือชื่อพาธที่มีคุณสมบัติครบถ้วนในการค้นหาของคุณ

ack 'pattern' /path/to/file.txt

บทสรุป

สำหรับคนส่วนใหญ่ในสถานการณ์ส่วนใหญ่ grep เป็นเครื่องมือค้นหาที่มีให้ใช้งานกันอย่างแพร่หลายมากที่สุด คุณยังสามารถดูเครื่องมือค้นหาอื่นๆ เช่น RipGrep สำหรับตัวเลือกการค้นหาที่เร็วขึ้น