Grep đệ quy không thành công cho các tệp * .c


13

Tôi đã cố gắng tìm kiếm đệ quy một mẫu trong tất cả các tệp .c theo cách sau

> grep -lr search-pattern *.c

Nhưng nhận được điều này như là đầu ra

> grep: *.c: No such file or directory

Khi tôi sử dụng điều này:

> grep -lr search-pattern *

Tôi nhận được rất nhiều. c tập tin trong các thư mục với mẫu.

Điều gì là sai với biểu thức trước đó?

Câu trả lời:


22

Tôi đề nghị sử dụng --includetùy chọn grep:

grep -lr --include='*.c' search-pattern .

1
+1. Tôi không biết --include=GLOBlựa chọn này. Kết hợp với tùy chọn đệ quy, điều này rất mạnh mẽ và không yêu cầu find. Đẹp!
gertvdijk

Đến bữa tiệc muộn ở đây, nhưng tôi bối rối về .việc cuối lệnh là để làm gì.
Nathan Jones

1
@NathanJones: grep yêu cầu một hoặc nhiều tên tệp hoặc thư mục để tìm kiếm. Dấu chấm cho biết: tìm kiếm trong thư mục hiện tại
enzotib

3

Các *.cmô hình được đánh giá bởi vỏ của bạn. Nó áp dụng cho thư mục hiện tại, giống như bạn sẽ sử dụng ls *.c.

Tôi nghĩ rằng những gì bạn muốn thay vào đó là tìm tất cả các tệp phù hợp với *.cmẫu (đệ quy) và có greptìm kiếm cho bạn trong đó. Đây là một cách để làm điều đó:

find . -name "*.c" -print0 | xargs --null grep -l search-pattern

Nó sử dụng xargsđể nối các kết quả tìm kiếm bằng cách find.


Ngoài ra, sử dụng -exectùy chọn để tìm, ví dụ:

find . -name "*.c" -exec grep -l search-pattern "{}" \;

Ngoài ra, tôi không chắc chắn nếu bạn thực sự muốn -ltùy chọn grep. Nó sẽ dừng lại ở trận đấu đầu tiên:

-l, --files-with-matches
      Suppress normal output; instead print the name of  each
      input  file  from which output would normally have been
      printed.  The scanning will stop on  the  first  match.
      (-l is specified by POSIX.)

Các find/xargsphá vỡ cú pháp trên tên tập tin chứa khoảng trắng. Các -Ltùy chọn grepdừng vào trận đấu đầu tiên của mỗi tập tin và tiếp tục với tập tin tiếp theo: nếu người duy nhất muốn xem nếu mẫu được chứa ít nhất một lần trong mỗi tập tin nhất định, nó là nhanh hơn.
enzotib

@enzotib Cảm ơn, đã sửa nó bằng -print0tùy chọn và xargs --null.
gertvdijk

-1

Tôi biết đây là một chủ đề khá cũ, nhưng vì tôi có cùng một câu hỏi, tôi muốn chia sẻ cách thức ưa thích của tôi để đạt được điều tương tự, ở dạng ngắn hơn nhiều.

ls | grep "file.*.c"

2
Câu hỏi là về việc tìm kiếm một mẫu không phải là tìm kiếm một tập tin.
Jay
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.