รายการไฟล์ที่มีคำเฉพาะในข้อความของพวกเขา


30

ฉันต้องการแสดงรายการไฟล์ซ้ำและไม่ซ้ำกันซึ่งมีคำที่กำหนด

ตัวอย่าง : การตรวจสอบคำว่า 'ตรวจสอบ' ฉันทำตามปกติคือ grep

$ grep check * -R

แต่เนื่องจากมีคำนี้เกิดขึ้นมากมายฉันได้รับผลลัพธ์จำนวนมาก ดังนั้นฉันเพียงต้องการรายการชื่อไฟล์ที่มีคำค้นหาที่กำหนด ฉันเดาว่ามีfindและxargsจะพอเพียงที่นี่ แต่ไม่แน่ใจ

ความคิดใด ๆ

คำตอบ:


39

ใช้ตัวเลือก-lหรือ--files-with-matchesเอกสารที่เป็นดังนี้:

หยุดเอาต์พุตปกติ แทนที่จะพิมพ์ชื่อของไฟล์อินพุตแต่ละไฟล์ซึ่งปกติจะพิมพ์ออกมา การสแกนจะหยุดในนัดแรก ( -lระบุโดย POSIX)

ตัวอย่างเช่นคุณสามารถใช้สิ่งต่อไปนี้:

$ grep check * -lR

ทำงานบน MSYS ด้วย ที่ดี!
Kos

2
ฉันใช้grep -rl "text to find" "/usr/share"และมันใช้งานได้ดี!
Shrout1

18
find . -type f -exec grep -l check {} +

คุณอาจไม่ต้องการใช้-Rตัวเลือกที่มี GNU รุ่นที่ทันสมัยgrepติดตาม symlinks เมื่อมากไปน้อยไดเรกทอรี ใช้-rตัวเลือกแทนซึ่งมีตั้งแต่รุ่น 2.12 (เมษายน 2012) จะไม่ติดตาม symlink อีกต่อไป

หาก grep ของคุณไม่ใช่ GNU หรือเก่ากว่ารุ่น 2.12 หรือหากคุณต้องการให้โค้ดของคุณพกพาไปยังระบบที่ไม่มีเลือดออกได้ให้ใช้findคำสั่งด้านบน

มิฉะนั้นคุณสามารถทำได้:

grep -rl check .

อย่าใช้*(เพราะจะละเว้นไฟล์ที่ซ่อนอยู่ในไดเรกทอรีปัจจุบัน (และในไดเรกทอรีปัจจุบันเท่านั้น) และอาจทำให้เกิดปัญหากับไฟล์ที่ชื่อขึ้นต้นด้วย a -) หลีกเลี่ยงตัวเลือกการส่งผ่านหลังจากอาร์กิวเมนต์เนื่องจากไม่รับประกันว่าจะทำงานขึ้นอยู่กับ สภาพแวดล้อมและไม่พกพาได้


1

ลองสิ่งนี้:

find . -type f | xargs grep -c check $1 | grep -v ":0"

สำหรับgrepธง ...

-c จะส่งคืนชื่อไฟล์ตามด้วย: และตัวเลขที่ระบุจำนวนครั้งที่สตริงการค้นหาปรากฏในไฟล์ที่กำหนด

-vจะเอาท์พุทจากการgrepค้นหาครั้งแรกกรองไฟล์ที่มีผลลัพธ์เป็นศูนย์และพิมพ์เฉพาะไฟล์ที่มีผลลัพธ์ที่ไม่เป็นศูนย์


สิ่งนี้จะได้รับการปฏิเสธที่ผิดพลาดหากคุณมีไฟล์ (หรือผู้กำกับ (IES)) ที่มีชื่อ:0อยู่ grep -v ':0$'มันจะดีกว่าที่จะทำ แม้จะทำให้หายใจไม่ออกในชื่อพา ธ ที่มีการขึ้นบรรทัดใหม่
สกอตต์

0

grep -rin "whatToFind" locationToFInd

เช่น $ grep -rin "vihaan"

จะค้นหาและแสดงรายการชื่อไฟล์ซ้ำและบรรทัดที่เกี่ยวข้องซึ่งมี "vihaan" อยู่ในนั้น "." อ้างถึงไดเรกทอรีปัจจุบัน


0
find . -type f | grep "keyword" *

ค้นหาในไดเรกทอรีปัจจุบัน หากต้องการค้นหาจากรูตให้ระบุ/แทน.


0

grep -lR "text-to-find" <where-to-find> ยังใช้งานได้ดี

เช่น grep -lR "NAVIGATE" .ที่เราค้นหาคำNAVIGATEใน.ในไดเรกทอรีปัจจุบัน


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