วิธีการค้นหาความลึกสูงสุดใน ack และ grep?


32

มีวิธีบอกackให้ค้นหาเฉพาะข้อความในโฟลเดอร์ปัจจุบันหรือไม่? (หรือระบุmax-depthระดับ?) และด้วยgrep?


1
ไม่ได้แอ๊ไม่มีตัวเลือกความลึกสูงสุดนอกเหนือจากที่-nจะไม่เรียกเก็บเงินเลย
Andy Lester

คำตอบ:


22

ใช้-nสำหรับno-recurse:

$ ack -n foo

grepจะไม่เรียกซ้ำโดยค่าเริ่มต้นและคุณควรใช้การ-rตั้งค่าสถานะนี้เฉพาะเมื่อคุณต้องการค้นหาแบบเรียกซ้ำ

คุณสามารถค้นหาไดเรกทอรีปัจจุบันด้วยgrepดังนี้:

$ grep -- foo *

13
ไม่ตอบคำถามใช่ไหม (ถ้าฉันต้องการชดเชยให้ลึกถึง 2)
สตีเวนลู

จุดดีฉันพลาด ข้อเสนอแนะใด ๆ
Eric Wilson

29

คุณสามารถหาคู่กับอาร์กิวเมนต์ -exec ตัวอย่าง:

find . -maxdepth 1 -exec grep foo {} \;

สิ่งนี้สามารถปรับขนาดได้เช่น -maxdepth 2


Stephane คำตอบของฉัน ( -maxdepth 1) ปรับขนาดได้ -maxdepth 2เช่น ฉันไม่รู้วิธีอธิบายการแก้ไขที่คุณทำเช่นนี้
David Wilkins

จะไม่ถึง @stephane หากคุณไม่ได้ใช้ @
Braiam

4
ใช่ฉันเห็นด้วยกับการแก้ไขของฉันมากเกินไป คุณอาจต้องการชี้แจงว่า ( -maxdepth) ไม่ใช่ไวยากรณ์พกพา / มาตรฐาน (เฉพาะ GNU และ BSD บางตัว) นอกจากนี้ยังไม่มีจุดใช้\;ที่นี่ (เรียกใช้หนึ่งgrepไฟล์ต่อหนึ่งไฟล์) ใช้grep -H foo {} +(เฉพาะ GNU) หรือgrep foo /dev/null {} +(มาตรฐาน) เพื่อให้แน่ใจว่าพิมพ์ชื่อไฟล์อยู่เสมอ มาตรฐานเทียบเท่า-maxdepth 2จะเป็นfind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas

2
นอกจากนี้ทราบว่าคุณจะให้ข้อความผิดพลาดไดเรกทอรี (รวมถึงการ.ที่คุณไม่ได้ให้-mindepth 1) ในขณะที่ GNU grepจะไม่พยายามที่จะอ่านไดเรกทอรีที่มี-r(มันrecursesในพวกเขา) คุณอาจต้องการที่จะเพิ่ม-d skipการgrep(สมมติว่า GNU grep) หรือดีกว่าเพิ่ม! -type dไปfindหรือดียิ่งขึ้น-type f(หรือ-xtype fสมมติว่า GNU find) ในขณะที่คุณอาจไม่ต้องการgrepที่จะอ่านไฟล์ที่ไม่ปกติ
Stéphane Chazelas

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