การเรียกซ้ำ grep ล้มเหลวสำหรับไฟล์ * .c


13

ฉันพยายามค้นหารูปแบบซ้ำในไฟล์. c ทั้งหมดด้วยวิธีต่อไปนี้

> grep -lr search-pattern *.c

แต่ได้สิ่งนี้เป็นผลลัพธ์

> grep: *.c: No such file or directory

เมื่อฉันใช้สิ่งนี้:

> grep -lr search-pattern *

ฉันได้รับมากมาย ไฟล์ c ในไดเรกทอรีที่มีรูปแบบ

เกิดอะไรขึ้นกับการแสดงออกก่อนหน้านี้?

คำตอบ:


22

ฉันขอแนะนำให้ใช้--includeตัวเลือกของgrep:

grep -lr --include='*.c' search-pattern .

1
+1 ฉันไม่รู้--include=GLOBตัวเลือก ร่วมกับตัวเลือก recursive findนี้จะมีประสิทธิภาพมากและไม่จำเป็นต้อง ดี!
gertvdijk

ไปงานปาร์ตี้สายที่นี่ แต่ฉันสับสนเกี่ยวกับสิ่ง.ที่ตอนท้ายของคำสั่งสำหรับ
นาธานโจนส์

1
@NathanJones: grep ต้องการชื่อไฟล์หรือไดเรกทอรีอย่างน้อยหนึ่งรายการเพื่อค้นหา จุดพูดว่า: ค้นหาในไดเรกทอรีปัจจุบัน
enzotib

3

*.cรูปแบบที่ได้รับการประเมินจากเปลือกของคุณ ls *.cซึ่งจะใช้กับไดเรกทอรีปัจจุบันเช่นเดียวกับที่คุณจะใช้

ฉันคิดว่าสิ่งที่คุณต้องการคือการค้นหาไฟล์ทั้งหมดที่ตรงกับ*.cรูปแบบ (ซ้ำ) และgrepค้นหาคุณในนั้น นี่คือวิธีในการทำเช่นนั้น:

find . -name "*.c" -print0 | xargs --null grep -l search-pattern

จะใช้เพื่อผนวกผลการค้นหาโดยxargsfind


หรือใช้-execตัวเลือกในการค้นหาเช่น:

find . -name "*.c" -exec grep -l search-pattern "{}" \;

นอกจากนี้ผมไม่แน่ใจว่าถ้าคุณต้องการจริงๆตัวเลือกในการ-l grepมันจะหยุดในนัดแรก:

-l, --files-with-matches
      Suppress normal output; instead print the name of  each
      input  file  from which output would normally have been
      printed.  The scanning will stop on  the  first  match.
      (-l is specified by POSIX.)

find/xargsแบ่งไวยากรณ์ในชื่อไฟล์ที่มีช่องว่าง -Lตัวเลือกในการgrepหยุดการแข่งขันครั้งแรกของแต่ละไฟล์และต่อด้วยไฟล์ต่อไปถ้าใครเพียง แต่ต้องการที่จะดูว่ารูปแบบที่มีอยู่อย่างน้อยหนึ่งครั้งในไฟล์แต่ละครั้งมันจะเร็ว
enzotib

@enzotib ขอบคุณคงที่โดยใช้ตัวเลือกและ-print0 xargs --null
gertvdijk

-1

ฉันรู้ว่านี่เป็นหัวข้อที่ค่อนข้างเก่า แต่เนื่องจากฉันมีคำถามเดียวกันฉันต้องการแบ่งปันวิธีที่ฉันต้องการเพื่อให้ได้มาซึ่งแบบที่สั้นกว่ามาก

ls | grep "file.*.c"

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