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

โดยค่าเริ่มต้น grep ค้นหาผ่านเนื้อหาของไฟล์รวมถึงชื่อไฟล์ มันรวมอยู่ในระบบ Linux ส่วนใหญ่และโดยทั่วไปเหมือนกันทุก distro นั่น said smaller หรือ less powerful Linux boxes อาจชอบรันคำสั่งอื่นอย่าง ack
ขึ้นอยู่กับว่าไฟล์เข้ารหัสอย่างไร grep อาจไม่สามารถดูภายในได้เสมอไป แต่สำหรับรูปแบบ text-based ส่วนใหญ่ grep สามารถสแกนข้อความของไฟล์สำหรับรูปแบบที่ระบุได้
grep -Rw '/path/to/search/' -e 'pattern'
แฟล็ก -R ตั้งค่า grep ให้เป็นโหมด recursive นำทางผ่านทุกไดเรกทอรีที่อยู่ภายในไดเรกทอรีที่ระบุ แฟล็ก -w ค้นหาการจับคู่ whole word หมายความว่า 'red' จะจับคู่เฉพาะ 'red' ที่ล้อมรอบด้วย whitespace characters ไม่ใช่ 'redundant' หรือ 'tired' แฟล็ก -e นำหน้ารูปแบบที่จะค้นหา มันรองรับ regular expressions โดยค่าเริ่มต้น
เพื่อเร่งความเร็ว grep คุณสามารถใช้แฟล็ก --exclude และ --include เพื่อจำกัดการค้นหาเฉพาะประเภทไฟล์บางประเภท ตัวอย่างเช่น --exclude=*.csv จะไม่ค้นหาภายในไฟล์ที่มี副檔名 .csv --include=*.txt ในทางกลับกัน จะค้นหาเฉพาะในไฟล์ที่มี .txt extension แฟล็กสามารถเพิ่มได้ทันทีหลังคำสั่ง grep ตามแสดงด้านล่าง:
grep --exclude=*.csv -Rw '/path/to/search' -e 'pattern'
คุณยังสามารถยกเว้นไดเรกทอรีที่ระบุได้โดยทำตามรูปแบบด้านล่าง:
grep --exclude-dir={dir1,dir2,*_old} -Rw '/path/to/search' -e 'pattern'
คำสั่งนี้จะไม่ค้นหาในไดเรกทอรีใดๆ ใน present working directory ที่ชื่อ dir1, dir2 หรือจับคู่รูปแบบ *_old กำจัดพวกมันออกจากกระบวนการค้นหา มันจะรันการค้นหา recursive, full-word match ที่ระบุลบนไฟล์อื่นๆ ทั้งหมดใน present working directory
การใช้ find เพื่อค้นหาคำเฉพาะในไฟล์

ในขณะที่ syntax ของคำสั่ง find ซับซ้อนกว่า grep บางคนชอบมัน
find . -name "*.php" -exec grep "pattern" {} \;
คำสั่งนี้จะใช้แฟล็ก -exec ของ find เพื่อส่งไฟล์ที่เจอไปให้ grep ค้นหา ด้วยการจัดวาง syntax อย่างฉลาด คุณสามารถใช้ file-system search ที่เร็วกว่าของ find เพื่อค้นหาประเภทไฟล์เฉพาะที่คุณต้องการค้นหาภายใน แล้ว pipe ไปให้ grep เพื่อค้นหาภายในไฟล์
โปรดทราบว่า find มองแค่ชื่อไฟล์ ไม่ใช่เนื้อหา นั่นคือเหตุผลที่ grep จำเป็นต้องค้นหาข้อความและเนื้อหาไฟล์ แฟล็ก grep ปกติควรทำงานเต็มที่จากภายในแฟล็ก -exec
การใช้ ack เพื่อค้นหาคำเฉพาะในไฟล์
คำสั่ง ack น่าจะเป็นเครื่องมือค้นหาที่เร็วที่สุด แต่ไม่ได้รับความนิยมเท่าตัวเลือกข้างต้น คำสั่งด้านล่างจะค้นหาภายใน current directory
ack 'pattern'
หากคุณต้องการค้นหาภายในไฟล์หรือไดเรกทอรีเฉพาะ คุณสามารถต่อท้ายไฟล์หรือ fully-qualified pathname ไปที่การค้นหาของคุณ
ack 'pattern' /path/to/file.txt
สรุป
สำหรับคนส่วนใหญ่ในสถานการณ์ส่วนใหญ่ grep เป็นเครื่องมือค้นหาที่ดีที่สุดและพร้อมใช้งานกว้างขวาง คุณยังสามารถดูเครื่องมือค้นหาอื่นๆ อย่าง RipGrep สำหรับตัวเลือกค้นหาที่เร็วกว่า