Grep ในไฟล์ที่มีนามสกุลเฉพาะภายใต้ไดเรกทอรี


11

มีคำสั่งที่อนุญาตให้ค้นหาคำหลักในไฟล์ภายใต้ไดเรกทอรีที่มีนามสกุลเฉพาะหรือไม่

สตริงgrep -irn "string" ./pathจะช่วยให้การค้นหา recursive ./pathสำหรับไฟล์ทั้งหมดภายใต้ไดเรกทอรี ข้อกำหนดเฉพาะของฉันคือค้นหาไฟล์ทั้งหมดภายใต้./pathด้วยส่วนขยายเช่น*.h

คำตอบ:


11

ฉันคิดว่าgrep -irn 'string' --include '*.h'มันมีประโยชน์มากกว่า


1
หากคุณกำลังจะทำเช่นนั้นอย่าลืมใส่"*.h"เครื่องหมายคำพูด
G-Man กล่าวว่า 'Reinstate Monica'

มันสามารถทำงานร่วมกับและไม่ใส่เครื่องหมายอัญประกาศ
Ginu Jacob

3
ตอนนี้มันทำ ลองสร้างไฟล์ที่เรียกว่าfoobar.hในไดเรกทอรีปัจจุบันแล้วลองอีกครั้ง
G-Man กล่าวว่า 'Reinstate Monica'

10

Sและเปิดใช้งานsh ell opt ion globstarด้วยคำสั่ง

    shopt -s globstar

สิ่งนี้จะทำให้**องค์ประกอบของชื่อไฟล์มีความหมายทุกอย่างที่นี่และด้านล่าง ดังนั้นpath/**หมายความว่าทุกอย่างในpathไดเรกทอรี และไดเรกทอรีย่อย (คุณไม่จำเป็นต้องพิมพ์./ที่นี่) จากนั้นคุณสามารถใช้

grep -in "string" path/**/*.h

เพื่อค้นหาทุกไฟล์ในและภายใต้.hpath


คุณสามารถUshopt -uขตลตัวเลือก



3

หากคุณสามารถติดตั้งบางสิ่งบางอย่างในเครื่องของคุณผมขอแนะนำให้ใช้แอ๊

คุณสามารถทำสิ่งที่คุณต้องการกับมันและอีกมากมาย สำหรับกรณีการใช้งานของคุณคุณสามารถทำได้:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hhตัวกรองในไฟล์h
  • -iละเว้นกรณี

ack --help=typeเพื่อหาที่กรองไฟล์ได้รับการสนับสนุนกำเนิดเรียกใช้คำสั่ง


นอกจากนี้ยังมีagอดีตโคลนของ ack ก่อนหน้านี้เนื่องจากชุดคุณลักษณะของพวกเขาเปลี่ยนไปเล็กน้อย
8bittree

ฉันไม่รู้เอจี ขอบคุณสำหรับการแบ่งปัน.
โฆษณา

3

แล้วอันนี้หล่ะ?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

คำอธิบาย:

  • -L: ติดตาม symlinks
  • -name: ใช้เครื่องหมายดอกจันคุณสามารถอธิบายส่วนขยาย
  • -in: เหมือนกับข้อเสนอของคุณ แต่ 'r' จะถูกแทนที่ด้วยfindคำสั่ง
  • {}: สิ่งนี้หมายถึงผลลัพธ์ของfindคำสั่ง
  • \; : ในกรณีที่คุณรวมเข้าfindด้วยกัน-execนี่เป็นตัวระบุการสิ้นสุดของคำสั่ง

1
วิธีการ"*.h"ทำงานหรือไม่ ฉันคิดว่ามันต้องเป็น'*.h'
Joe

ฉันมักจะทำงานกับคำพูดสองครั้งฉันไม่คิดว่ามันจะสร้างความแตกต่าง
Dominique

0

หากคุณใช้ gnu grep งั้นก็มีธงที่ทำสิ่งที่คุณต้องการ:

grep -irn --include=\*.h "string" path

แม้ว่าฉันจะไม่คิดว่ามันมีอยู่ใน greps อื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.