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?
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?
Câu trả lời:
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 *
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
-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.
-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 ...
.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.
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.
-nkhông tái diễn chút nào.