Làm cách nào tôi có thể tìm kiếm đệ quy các thư mục cho một mẫu và chỉ in ra tên tệp và số dòng


7

Hiện tại tôi đang sử dụng grep như sau:

grep -lr <PATTERN> .

Điều này mang lại cho tôi đầu ra sau, chứa danh sách tất cả các tệp có nội dung (không phải tên) chứa:

./path/to/file1
./path/to/file2
...

Điều này không sao nhưng biết số dòng sẽ hữu ích. Đầu ra sau đây sẽ là lý tưởng nhưng đã đi qua trang man cho grep, tôi dường như không thể tìm ra các công tắc đúng:

./path/to/file1 15, 22, 54
./path/to/file2 16, 17
...

Điều này có thể với grep hoặc một số công cụ khác?

Câu trả lời:


5

ack làm một cái gì đó tương tự theo mặc định. bạn có thể dùng

$ ack blah
path/to/blah
16: blah blah
19: blah blah blah

path/to/more/blah
21: blahness

Nếu bạn chỉ muốn tên tập tin phù hợp với bạn có thể nói ack -l. ack -lcsẽ cung cấp cho bạn số lượng phù hợp cho mỗi tập tin.


2

Grep có các tùy chọn để chỉ in tên tệp, hoặc chỉ tên tệp và số lượng khớp, hoặc các dòng khớp (có thể với tên tệp và số dòng), nhưng không ngưng tụ nhiều kết quả trùng khớp trên một dòng.

Bạn có thể lọc đầu ra grep hoặc sử dụng một công cụ khác như awk.

find . -type f -exec awk 'FNR==1 {if (found) print ""; found=0}
                          /PATTERN/ { if (!found) printf("%s", FILENAME);
                                      printf(" %d", FNR);
                                      found=1 }
                          END {if (found) print ""}' {} +

1
grep -rins <pattern> *

Điều đó có làm những gì bạn đang tìm kiếm?

Trong trường hợp bạn có mẫu phức tạp hơn, ví dụ như khi sử dụng egrep, nó có thể hữu ích để sử dụng egrep -rinos <pattern> *thay thế.

Để tăng thêm khả năng đọc, thêm --colorvào danh sách tham số. Cá nhân, tôi có điều đó trong .zshrc:

export GREP_OPTIONS="--color"

1
-i bỏ qua các trường hợp, mà không được yêu cầu.
người dùng không xác định

0

nếu bạn muốn tìm kiếm một cây đầy đủ hãy thử

find . -exec grep -n blah  {} /; -ls  

hoặc không tương tự

find . -exec grep -n blah {} /; -print

0

grep's -Hthẻ bao gồm tên tập tin, grep' s tag -n in số dòng. Nếu bạn muốn chỉ liệt kê trận đấu đầu tiên và tên tệp, bạn có thể sử dụng -l.
Để loại trừ thông tin bổ sung, bạn có thể chuyển sang sedtrong khi lấy cả số dòng và tên tệp bạn có thể chuyển sang sed.

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.