Liệt kê các tệp chứa một từ cụ thể trong văn bản của họ


30

Tôi muốn liệt kê các tệp đệ quy và duy nhất có chứa từ đã cho.

Ví dụ : Kiểm tra từ 'kiểm tra', tôi thường làm là một grep

$ grep check * -R

Nhưng vì có nhiều sự xuất hiện của từ này, tôi nhận được rất nhiều đầu ra. Vì vậy, tôi chỉ cần liệt kê tên tệp có chứa từ tìm kiếm đã cho. Tôi đoán một số mẹo với findxargssẽ đủ ở đây, nhưng không chắc chắn.

Có ý kiến ​​gì không?

Câu trả lời:


39

Sử dụng -lhoặc --files-with-matchestùy chọn được ghi lại như sau:

Ức chế đầu ra bình thường; thay vào đó hãy in tên của từng tệp đầu vào mà từ đó đầu ra thường được in. Quá trình quét sẽ dừng lại ở trận đấu đầu tiên. ( -lđược chỉ định bởi POSIX.)

Vì vậy, ví dụ bạn có thể sử dụng như sau:

$ grep check * -lR

Hoạt động trên MSYS cũng vậy. Tuyệt quá!
Kos

2
Tôi đã sử dụng grep -rl "text to find" "/usr/share"và nó hoạt động rất tốt!
Shrout1

18
find . -type f -exec grep -l check {} +

Có lẽ bạn không muốn sử dụng -Rtùy chọn với các phiên bản GNU hiện đại greptuân theo các liên kết tượng trưng khi giảm dần các thư mục. Sử dụng -rtùy chọn thay vì ở đó phiên bản 2.12 (tháng 4 năm 2012) không còn theo liên kết tượng trưng.

Nếu grep của bạn không phải là GNU, hoặc cũ hơn phiên bản 2.12 hoặc nếu bạn cần mã của mình để có thể di chuyển đến các hệ thống GNU không chảy máu, hãy sử dụng findlệnh trên.

Nếu không, bạn có thể làm:

grep -rl check .

Không sử dụng *(vì sẽ bỏ qua các tệp ẩn trong thư mục hiện tại (và chỉ trong thư mục hiện tại) và sẽ gây ra sự cố cho các tệp có tên bắt đầu bằng a -), tránh chuyển các tùy chọn sau khi các đối số không được bảo đảm hoạt động tùy thuộc vào môi trường và không di động.


1

Thử đi:

find . -type f | xargs grep -c check $1 | grep -v ":0"

Đối với những greplá cờ ...

-c sẽ trả về một tên tệp theo sau: và một số cho biết số lần tìm kiếm xuất hiện trong tệp đã cho.

-vsẽ lấy đầu ra từ lần greptìm kiếm đầu tiên , lọc ra các tệp có kết quả bằng 0 và chỉ in ra các tệp có kết quả khác không.


Điều này sẽ nhận được âm tính giả nếu bạn có (các) tệp (hoặc giám đốc (ies)) có tên chứa :0. Tốt hơn là nên làm grep -v ':0$'. Thậm chí điều đó sẽ gây nghẹt thở cho các tên đường dẫn có chứa (các) dòng mới.
Scott

0

grep -rin "whatToFind" locationToFInd

ví dụ: $ grep -rin "vihaan".

sẽ tìm kiếm đệ quy và liệt kê tên tệp và các dòng tương ứng có "vihaan" trong đó, "." đề cập đến thư mục hiện tại.


0
find . -type f | grep "keyword" *

tìm kiếm trong thư mục hiện tại. Để tra cứu từ root, chỉ định /thay vì.


0

grep -lR "text-to-find" <where-to-find> cũng hoạt động tốt.

ví dụ, grep -lR "NAVIGATE" .nơi chúng tôi tìm thấy từ NAVIGATEtrong .thư mục hiện tại.


-2
 grep -rli trim \` find . -name *.q \` 

Cung cấp cho bạn danh sách các .qtập tin chứa từ khóatrim

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.