Làm thế nào để bạn tìm kiếm văn bản cụ thể trong các loại tập tin cụ thể? [bản sao]


13

Có thể trùng lặp:
Làm cách nào tôi có thể grep trong tệp nguồn cho một số văn bản?

Lệnh nào để tìm kiếm văn bản cụ thể trong các loại tệp cụ thể, theo cách đệ quy, trong thư mục hiện tại?


Bạn muốn trả lại cái gì? dòng văn bản là trên? Tên của tập tin văn bản nằm trong?
MaQleod

@MaQleod: Điều đó sẽ tốt (tên tệp + vải lanh + đoạn trích), nếu có thể.
Phillip

@slhck: ack-grep chưa được cài đặt; Tôi không có quyền để cài đặt nó.
Phillip

1
Bạn sẽ không cần ack-grep, bạn có thể sử dụng các ví dụ trong câu hỏi khi bắt đầu (giống như tôi đã nói), tức là các find | xargs | grepdòng. Đối với đầu ra cụ thể, man grepluôn luôn hữu ích để đọc.
slhck

@slhck: Cảm ơn, vì vậy tôi đã làm grep -r --include=*.<type> "<string>" ., mà đã làm việc. Thật không may, trang người đàn ông không đơn giản lắm khi đề cập đến dấu chấm.
Phillip

Câu trả lời:


11
find . -type f -name '*.extension' | xargs grep "string"

Lệnh này chạy find trên thư mục cục bộ (.) Cho bất kỳ tệp nào có tên khớp với mẫu * .extension, sau đó chạy grep cho "chuỗi" trên kết quả tìm kiếm . Lưu ý rằng tìm được vốn là đệ quy. Miễn là bạn có thể phân biệt các tệp mà bạn muốn với các tệp bạn không dựa trên tên, thì tệp này sẽ phù hợp với bạn.


2
Điều này phá vỡ với tên tệp có chứa khoảng trắng, bạn nên sử dụng print0tùy chọn để an toàn hơn.
slhck

Chỉ find -print0không giúp được, cũng sử dụng xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo

0

Để liệt kê tên tệp, số dòng trong tệp được chỉ định và dòng văn bản xuất hiện:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Nó sẽ chỉ chạy trong thư mục hiện tại, nhưng nó sẽ định dạng độc đáo cho bạn.

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.