Cách tìm tệp có văn bản nhất định trong Terminal


168

Tôi muốn tìm tất cả các tệp có chứa một chuỗi văn bản nhất định. Làm thế nào bạn sẽ làm điều đó trong Terminal?


Nếu bạn muốn có kết quả nhanh, hãy sử dụng Spotlight. Ngoài ra nếu bạn muốn tìm các tệp không nhất thiết phải lưu trữ văn bản trực tiếp trong tệp như PDF hoặc ODF.
Joey

Lời khuyên tốt, nhưng trong trường hợp của tôi, tôi không chắc các tệp được lập chỉ mục vì chúng nằm trên trình điều khiển mạng. Và chúng cũng là các tệp xml thuộc về một chương trình cụ thể.
Svish

Hãy xem unix.stackexchange.com/a/37932/213832 giải pháp này hoạt động tốt
boyd4715

Câu trả lời:


280
grep -r 'text goes here' path_goes_here

1
Tôi sẽ đề nghị một man grepkhám phá tất cả các lựa chọn tuyệt vời của grep
Ludovic Kuty

Điều này liệt kê tất cả các tệp tồn tại trong đường dẫn và thêm: No such file or directory Tôi đang cố gắng để chỉ nhận danh sách các lần xuất hiện văn bản. Làm thế nào chúng ta có thể có được danh sách đó?
CP3O

7
Có nó : grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

Nhưng điều này trả về nội dung của các tệp phù hợp, không phải chi tiết tệp (tên, đường dẫn). Đề xuất của CP3O hoạt động.
địa lý

28

sử dụng đèn sân khấu

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

đừng quên nhìn vào:

man mdfind

2
Điều này có hoạt động đối với các tệp mà spotlight không lập chỉ mục (tức là các tệp trong các thư mục ẩn, tệp cấu hình hệ thống, v.v.) không?
Peter Berg

Grep dường như không phân tích các tệp .xlsx, nhưng điều này đã hoạt động tốt. Một ví dụ dễ dàng khác: mdfind -onlyin. "Tìm kiếm văn bản"
FvD

11
  1. Thông qua Ack

brew install ack ack "text goes here"

  1. Qua tìm

find . |grep "text goes here"

  1. Thông qua grep

grep -RnslI "text goes here"


4

Bạn có thể chọn một trong những điều dưới đây tùy thuộc vào sở thích và nhu cầu của bạn. Giả sử bạn cần tìm kiếm các tệp chứa văn bản - "async", theo cách đệ quy trong thư mục hiện tại, bạn có thể làm như vậy theo một trong những cách như dưới đây:

Sử dụng grep nhập mô tả hình ảnh ở đây

Sử dụng ack nhập mô tả hình ảnh ở đây


2

Câu trả lời của Ignacio rất hay và giúp tôi tìm các tập tin có chứa văn bản nhất định. Vấn đề duy nhất tôi gặp phải là khi chạy lệnh này, tất cả các tệp sẽ được liệt kê, bao gồm một tệp mà mẫu không hiển thị.

No such file or directory Đây là những gì tôi thấy bên cạnh các tệp không chứa mẫu.

Nếu thay vào đó bạn thêm -svào lệnh, như trong : grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH DIRECTORY] -sđược sử dụng, nó sẽ chỉ cho bạn thấy tập tin nào chứa mẫu.

Tương tự nếu grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -slệnh được sử dụng, nó in tệp cộng với số dòng và sự xuất hiện của mẫu.

Xin hãy sửa cho tôi nếu sự hiểu biết của tôi là sai.

Tham khảo: Làm cách nào để grep không in ra 'Không có lỗi tệp hoặc thư mục như vậy?


Một cách khác để tránh những pesky Không có lỗi tập tin như vậy , là chuyển stderr thành null. grep ... 2>/dev/null. Giải pháp này hoạt động cho hầu hết các chương trình, vì chúng báo cáo các thông báo lỗi trên luồng stderr, không phải thiết bị xuất chuẩn. Tôi đã sử dụng giải pháp này nhiều lần với findnó, vì nó sẽ cho phép Quyền bị từ chối đối với nhiều tệp.
jpaugh

(1) Nếu bạn nhận được No such file or directorytin nhắn cho các tệp tồn tại, hoặc bạn đang làm gì đó sai hoặc hệ thống của bạn bị hỏng. (2) Phải [PATH OF PARENT]làm gì với bất cứ điều gì?
G-Man

@ G-Man Tôi đã chỉnh sửa câu trả lời để hiển thị [PATH OF DIRECTORY]khi chỉ cần một người không quen biết muốn biết lý do tại sao tôi đã đặt./
CP3O

@ G-Man Tôi đang sử dụng máy mac không phải Ubuntu, không chắc hệ thống của tôi sẽ bị hỏng như thế nào, tôi hầu như chưa làm gì trên đó.
CP3O
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.