Làm thế nào để tìm kiếm các chuỗi bên trong các tập tin trong một thư mục?


98

Có tiện ích nào để thực hiện tìm kiếm một chuỗi trong các tệp ASCII để tránh tìm kiếm dòng lệnh không?

Làm thế nào để thực hiện tìm kiếm dòng lệnh, ví dụ cho chuỗi "test" bên trong tất cả các tệp trong thư mục /var/x/?


15
Bạn thực sự có nghĩa là không sử dụng dòng lệnh? Bởi vì công cụ tốt nhất cho điều đó vẫn còn ...
alci

Trên CLI Người tìm kiếm bạc có thể làm việc tốt hơn.
Pablo Một

Câu trả lời:


78

Bạn có thể sử dụng searchmonkey. Công cụ này có sẵn trong kho, vì vậy bạn có thể chỉ cần

sudo apt-get install searchmonkey

Mặt khác, tìm kiếm dòng lệnh với grep thực sự được dành cho ...

Đây là một ảnh chụp màn hình từ searchmonkey

nhập mô tả hình ảnh ở đây


bị sập do tải quá nhiều :(
WiredIn

1
tôi đã có vấn đề với searchmonkey. Nó không đáng tin theo nghĩa là nó cho phép trượt rất nhiều lần
tony gil

Làm cách nào để chạy "searchmonkey" từ GUI? sau khi cài đặt bằng dòng lệnh, tôi không muốn sử dụng dòng lệnh
Echeban

153

Tôi giả sử rằng câu hỏi đầu tiên của bạn là về một thay thế GUI cho greplệnh. Tôi không thể giúp bạn điều đó, tôi luôn thấy dòng lệnh rất hiệu quả.

Đối với dòng lệnh, hãy thử

grep "test" /var/x/*

Nếu bạn muốn tìm kiếm đệ quy (không chỉ trong /var/x/, mà cả trong các thư mục con của chúng), hãy làm

grep -R "test" /var/x/

Để tránh grepping các tệp mà grep nghĩ là nhị phân, sử dụng -Itùy chọn:

grep -I "test" /var/x/

Nếu grep nghĩ rằng một tệp là nhị phân (dựa trên một vài byte đầu tiên của tệp), nó sẽ cho rằng nó không khớp thay vì đi qua toàn bộ tệp.


1
Nó sẽ hoạt động nếu thư mục chứa một số tệp không phải ascii?
Anwar

1
Chà, grep cũng sẽ thử tìm kiếm chuỗi trong tệp nhị phân và báo cáo nếu nó khớp:Binary file file.jpg matches
Ngày 1 tháng

1
@Janemony Khi một tệp nhị phân được đọc dưới dạng văn bản, nó thường có các "dòng" rất dài (vì một chuỗi ký tự hoặc ký tự sẽ được giải thích để chỉ định cuối dòng có thể không xuất hiện trong một thời gian dài hoặc bao giờ). Tùy thuộc vào cách triển khai tiện ích tìm kiếm văn bản, điều này có thể gây ra sự cố về hiệu suất nếu mỗi "dòng" được đọc đầy đủ vào bộ nhớ và sau đó được kiểm tra xem liệu nó có khớp với chuỗi tìm kiếm hay không ( grepmặc dù tôi biết cách mã hóa hợp lý không biết nếu Ubuntu grepđược viết theo cách đó).
Eliah Kagan

1
"grep -i" cho trường hợp tìm kiếm không nhạy cảm
Czarek Tomczak

3
Cần có một *dấu gạch chéo cuối cùng trong đường dẫn hoặc grep không xuất hiện để thực hiện bất kỳ công việc nào trong 14.04
DavidScherer

20

Bạn có thể sử dụng regexxer, đây là một công cụ tìm kiếm / thay thế GUI tuyệt vời cho các biểu thức thông thường.

bạn có thể tải xuống bằng cách:

sudo apt-get install regexxer

nhập mô tả hình ảnh ở đây


nó cực nhanh, nhưng vấn đề tôi gặp phải với ứng dụng này là: 1. nó không có chế độ chỉ đọc, vì vậy tôi không vô tình thay thế hoặc xóa bất cứ thứ gì 2. nó hiển thị văn bản, nhưng nó sẽ không chuyển sang cụ thể dòng mà mô hình đã khớp. (Tôi đã cuộn khoảng 2000 dòng mã để tìm thấy những gì tôi đã có sau khi thay đổi màu thành màu đỏ tươi!)
Mehrad Mahmoudian

6

Hãy thử Recoll, GUI tốt nhất tôi từng sử dụng. Để cài đặt recoll trong tất cả các phiên bản Ubuntu được hỗ trợ hiện tại, hãy mở terminal và gõ:

sudo apt install recoll

Nó cần một chút thời gian để lập chỉ mục các tệp trước tiên (bạn có thể xác định đường dẫn danh sách đen hoặc phần mở rộng hoặc mime).


Tôi có thể xác nhận rằng Recoll hoàn toàn là một thế giới khác đối với gnome-search-toolhoặc search-monkey. Nó sử dụng Xapian, do đó, nó có thể kiểm tra và lập chỉ mục các tài liệu từ (cả .doc và .docx), tệp pdf, thư mục thư, v.v.
Avio

Uh, nó có sẵn thông qua deb pack ( sudo apt install recoll) và nó thực hiện công việc của nó khi ngay cả grep không thành công, ví dụ với các tài liệu .docx được nén bằng nén pkzip.
Avio

lưu ý rằng recollyêu cầu xây dựng chỉ số đầu tiên.
Yrogirg

5

Bạn có thể sử dụng greplệnh từ thiết bị đầu cuối:

grep -r string *

Lệnh này sẽ tìm thấy tất cả các lần xuất hiện của "chuỗi" trong tất cả các tệp trong thư mục hiện tại (hoặc thư mục con).

Đối với các tệp ẩn, bạn có thể sử dụng:

grep -r string ..


2

Thật không may, grep thực hiện công việc tìm kiếm bên trong các tệp Word (.doc) rất kém, nhưng bạn có thể chuyển đầu ra catdoc thành grep. Tôi không phải là lập trình viên nhưng kịch bản nhỏ này hoạt động tốt với tôi:

#!/bin/bash
export GREP_OPTIONS='--color=auto'
echo -e "\n
Welcome to scandocs. This will search .doc (NOT .docx) files in this directory for a given string. \n
Type in the text string you want to find... \n"
read response
find . -name "*.doc" | 
while read i; do catdoc "$i" | 
grep -iH --label="$i" "$response"; done

Tất cả các cải tiến và đề xuất chào mừng!


1
Câu hỏi này là về các ứng dụng đồ họa và các tệp văn bản thuần túy. Tôi không chắc chắn những gì grep.docphải làm với câu hỏi.
Andrea Corbellini

Có vẻ ổn, xem câu trả lời chi tiết của tháng một về grep.
thủy thủ

2

Tôi vừa phát hành một công cụ đơn giản để thực hiện công việc. Thiết nghĩ chủ yếu dành cho nhà phát triển phần mềm, nó có đặc tính (duy nhất?) Khi mở một số tệp trong cùng một cửa sổ. Nó trình bày kết quả trong trình duyệt bằng trình soạn thảo Ace (được đề xuất!) Hoặc htmlararar. Nó là một công cụ dựa trên java vì vậy nó chạy trong windows cũng như trong linux.

kiểm tra nó

https://sourceforge.net/projects/queacetu.gastona.p/


1

mỗi https://askubfox.com/a/1141367/47073

Bạn có thể sử dụng mate-search-tool, đó là điều tương tự như gnome-search-toolđã được gỡ bỏ. Tôi gặp vấn đề với searchmonkey, nó bị thiếu một số kết quả và chậm, không khuyến nghị.

Để cài đặt mate-search-tool:

sudo apt install mate-utils
mate-search-tool

0

Bạn có thể sử dụng tùy chọn Sublime Text Find in Files từ Findmenu để tìm kiếm các chuỗi bên trong các tệp từ một thư mục.

Để cài đặt văn bản tuyệt vời 3

sudo add-apt-repository ppa:webupd8team/sublime-text-3
sudo apt-get update
sudo apt-get install sublime-text-installer

Bạn cũng có thể làm theo câu hỏi này để biết cách cài đặt Sublime khác trên Ubuntu .

Để tìm kiếm trong tất cả các tệp cho một chuỗi từ một thư mục trong Sublime Text, bạn có thể theo dõi câu hỏi này để có câu trả lời rõ ràng hơ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.