2012-05-17 53 views
12

Tôi có một thư mục có tên XYZ có thư mục ABC, DEF, GHI bên trong nó. Tôi muốn tìm kiếm một mẫu 'writeText' trong tất cả * .c trong tất cả các thư mục (ví dụ: XYZ, XYZ/ABC, XYZ/DEF và XYZ/GHI) Tôi có thể sử dụng lệnh grep nào?grep trong tất cả các thư mục

Ngoài ra nếu tôi chỉ muốn tìm kiếm trong XYZ, XYZ/ABC, XYZ/GHI và không phải XYZ/DEF, tôi có thể sử dụng lệnh grep nào?

Cảm ơn bạn!

+1

Cờ '--recursive' và' --include'/'--exclude' có thể là những gì bạn muốn – geoffspear

Trả lời

24
grep -R --include="*.c" --exclude-dir={DEF} writeFile /path/to/XYZ 
  • -R nghĩa đệ quy, vì vậy nó sẽ đi vào các thư mục con của thư mục bạn đang grepping qua
  • --include="*.c" có nghĩa là "tìm kiếm tệp có đuôi .c"
  • --exclude-dir={DEF} có nghĩa là "loại trừ Nếu bạn muốn loại trừ nhiều thư mục, hãy thực hiện điều này: --exclude-dir={DEF,GBA,XYZ}
  • writeFile là mẫu mà bạn đang tìm kiếm
  • /path/to/XYZ là đường dẫn đến thư mục bạn muốn grep thông qua.

Lưu ý rằng các cờ này áp dụng cho GNU grep, có thể khác nếu bạn đang sử dụng BSD/SysV/AIX grep. Nếu bạn đang sử dụng Linux/GNU grep utils bạn sẽ ổn.

+0

Cảm ơn bạn. Những công việc này! – Romonov

3

Bạn có thể sử dụng lệnh sau để trả lời ít nhất phần đầu tiên của câu hỏi.

find . -name *.c | xargs grep "writeText" 
+1

nhận được thông báo này: tìm. -name * .c | xargs grep "writeText" tìm: đường dẫn phải đứng trước biểu thức Cách sử dụng: tìm [đường dẫn ...] [biểu thức] – Romonov

+0

Tôi hoạt động trong máy Ubuntu của mình. Bạn có thể thử sử dụng chỉ cần tìm. -name * .c và chia sẻ kết quả. –

+0

Tin nhắn tương tự. Hệ thống của tôi là redhat. – Romonov

-1

Điều này phù hợp với tôi. Tôi sửa đổi một chút cho nhu cầu của tôi. Tôi đang sử dụng Macintosh OSX 10.8.3 từ ứng dụng Thiết bị đầu cuối.

Thay vì "* .c" Tôi đã sử dụng "util" - đây là một phần của mỗi tên tệp mà tôi muốn tìm kiếm trong số nhiều tệp khác nằm trong thư mục.

Trong trường hợp của tôi, tôi không cần "--exclude-dir" vì tôi đang tìm kiếm tất cả các thư mục con bên dưới vị trí hiện tại của tôi.

Trong writeFile tôi đã sử dụng (có dấu ngoặc kép) "use =" hoặc "request" là hai chuỗi tôi muốn tìm trong (các) tệp.

Sau đó tôi đã sử dụng "." để chỉ ra rằng tôi muốn bắt đầu tìm kiếm của tôi trong thư mục hiện tại.

Sau đó, tôi sử dụng> /[path]/[filename.txt] để cho biết rằng tôi muốn tất cả đầu ra được thêm vào tệp văn bản.

Cảm ơn bạn.

Các vấn đề liên quan