Làm thế nào để thực hiện tìm kiếm độ sâu tối đa trong ack và grep?


32

Có cách nào để nói ackchỉ tìm kiếm văn bản trên thư mục hiện tại không? (hoặc chỉ định một max-depthcấp độ?) Và với grep?


1
Không, ack không có tùy chọn độ sâu tối đa, ngoài việc -nkhông tái diễn chút nào.
Andy Lester

Câu trả lời:


22

Sử dụng -ncho no-recurse:

$ ack -n foo

grepkhông được đệ quy theo mặc định và bạn chỉ nên sử dụng -rcờ nếu bạn muốn tìm kiếm đệ quy.

Bạn có thể tìm kiếm thư mục hiện tại grepnhư sau:

$ grep -- foo *

13
Không trả lời câu hỏi? (điều gì sẽ xảy ra nếu tôi muốn tái diễn ở độ sâu 2)
Steven Lu

Điểm tốt, tôi đã bỏ lỡ điều đó. Bất kỳ đề xuất?
Eric Wilson

29

Bạn có thể tìm thấy cặp đôi với đối số -exec. thí dụ:

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

Điều này có thể được thu nhỏ, tức là -maxdepth 2


Stephane, câu trả lời của tôi ( -maxdepth 1) đã được mở rộng. Ví dụ -maxdepth 2. Tôi không biết làm thế nào để mô tả chỉnh sửa bạn đã thực hiện như vậy.
David Wilkins

nó sẽ không đến được @stephane nếu bạn không sử dụng @.
Braiam

4
Có xin lỗi, tôi đồng ý chỉnh sửa của tôi là quá nhiều xâm nhập. Bạn vẫn có thể muốn làm rõ rằng ( -maxdepth) không phải là cú pháp di động / tiêu chuẩn (chỉ GNU và một số BSD). Ngoài ra, không có điểm nào sử dụng \;ở đây (chạy một grepcho mỗi tệp). Sử dụng grep -H foo {} +(GNU cụ thể) hoặc grep foo /dev/null {} +(tiêu chuẩn) để đảm bảo tên tệp luôn được in. Tiêu chuẩn tương đương -maxdepth 2sẽ làfind . -path './*/*' -type d -prune -o -type f -exec ...
Stéphane Chazelas

2
Cũng lưu ý rằng bạn sẽ đưa ra thông báo lỗi cho các thư mục (bao gồm cả .khi bạn không cung cấp -mindepth 1) trong khi GNU grepsẽ không cố đọc các thư mục với -r(nó đệ quy trên chúng). Bạn có thể muốn thêm một -d skipđến grep(giả sử GNU grep) hoặc tốt hơn thêm ! -type dđể findhoặc thậm chí tốt hơn -type f(hoặc -xtype fgiả GNU find) như bạn có lẽ không muốn grepđể đọc các tập tin không thường xuyên.
Stéphane Chazelas

4
Tôi có xu hướng sử dụng grep -Hinvới phương pháp này để tôi có thể thấy tên tệp và dòng xảy ra.
GDP2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.