Tìm một chuỗi chỉ trong một tệp cụ thể trong thư mục con


10

Giả sử tôi cần tìm hàm GetTypes()trong tất cả tệp nguồn C # ( .cs) các thư mục / thư mục con.

Tôi đã sử dụng grep -rn GetTypes *.cs, nhưng tôi đã có một lỗi với grep: *.cs: No such file or directory. Tôi đã phải sử dụng grep -rn GetTypes *, nhưng trong trường hợp này, nó không chỉ hiển thị tất cả các tệp *.cs.

Tôi cần sử dụng lệnh nào để tìm chuỗi chỉ trong .cstệp?


Câu trả lời:


12

Nếu vỏ của bạn là bash ≥4, hãy đặt shopt -s globstarvào ~/.bashrc. Nếu vỏ của bạn là zsh, bạn tốt. Sau đó bạn có thể chạy

grep -n GetTypes **/*.cs

**/*.cscó nghĩa là tất cả các tệp khớp *.cstrong thư mục hiện tại hoặc trong thư mục con của nó, theo cách đệ quy.

Nếu bạn không chạy shell hỗ trợ **nhưng grep của bạn hỗ trợ --include, bạn có thể thực hiện grep đệ quy và yêu grepcầu chỉ xem xét các tệp khớp với các mẫu nhất định. Lưu ý các trích dẫn xung quanh mẫu tên tệp: nó được giải thích bởi grep, không phải bởi shell.

grep -rn --include='*.cs' GetTypes .

Chỉ với các công cụ di động (một số hệ thống hoàn toàn không có grep -r), hãy sử dụng findcho phần truyền tải thư mục và grepcho phần tìm kiếm văn bản.

find . -name '*.cs' -exec grep -n GetTypes {} +

Để tạm thời đặt globstartùy chọn cho trình bao Bash 4+ hiện tại, hãy sử dụng : shopt -s globstar.
tjanez

8

Bạn nên kiểm tra grep little billiant / tìm sự thay thế được gọi là ack. Nó được thiết lập đặc biệt để tìm kiếm thông qua các thư mục của các tệp mã nguồn.

Lệnh của bạn sẽ trông như thế này:

ack --csharp GetTypes

4

Nếu bạn sử dụng GNU grep, bạn có thể chỉ định tệp nào sẽ bao gồm trong thư mục đệ quy:

grep --include '*.cs' -rn GetTypes .

(trong đó khoảng thời gian cuối cùng biểu thị thư mục làm việc hiện tại là gốc của giao dịch)


4

Tôi đang sử dụng kết hợp find và grep:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

Đối với find, bạn có thể thay thế .bằng một thư mục và loại bỏ -namenếu bạn muốn tìm trong mọi tệp.

grep, -bnsẽ in vị trí và số dòng và --colorsẽ giúp mắt bạn bằng cách làm nổi bật những gì bạn đang tìm kiếm.

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.