it-swarm-vi.tech

Làm cách nào để tìm tất cả các tệp chứa văn bản cụ thể trên Linux?

Tôi đang cố gắng tìm cách quét toàn bộ hệ thống Linux của mình cho tất cả các tệp có chứa một chuỗi văn bản cụ thể. Chỉ cần làm rõ, tôi đang tìm văn bản trong tệp chứ không phải trong tên tệp.

Khi tôi đang tìm cách làm điều này, tôi đã bắt gặp giải pháp này hai lần:

find / -type f -exec grep -H 'text-to-find-here' {} \;

Tuy nhiên, nó không hoạt động. Nó dường như hiển thị mọi tập tin duy nhất trong hệ thống.

Đây có phải là gần với cách thích hợp để làm điều đó? Nếu không, tôi nên làm thế nào? Khả năng tìm chuỗi văn bản này trong các tệp sẽ cực kỳ hữu ích cho một số dự án lập trình tôi đang thực hiện.

4457
Nathan

Làm như sau:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r hoặc -R là đệ quy,
  • -n là số dòng và
  • -w là viết tắt của từ khớp với toàn bộ Word.
  • -l (chữ thường L) có thể được thêm vào để chỉ cung cấp tên tệp của các tệp phù hợp.

Cùng với những cái này, các cờ --exclude, --include, --exclude-dir có thể được sử dụng để tìm kiếm hiệu quả:

  • Điều này sẽ chỉ tìm kiếm thông qua các tệp có phần mở rộng .c hoặc .h:

    grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • Điều này sẽ loại trừ việc tìm kiếm tất cả các tệp kết thúc bằng phần mở rộng .o:

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • Đối với các thư mục, có thể loại trừ một thư mục cụ thể thông qua tham số --exclude-dir. Ví dụ: điều này sẽ loại trừ các dirs dir1 /, dir2/và tất cả chúng đều khớp với * .dst /:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

Điều này làm việc rất tốt cho tôi, để đạt được mục đích gần như giống như của bạn.

Để biết thêm tùy chọn, hãy kiểm tra man grep.

8076
rakib_

Bạn có thể sử dụng grep -ilR:

grep -Ril "text-to-find-here" /
  • i là viết tắt của trường hợp bỏ qua (tùy chọn trong trường hợp của bạn).
  • R là viết tắt của đệ quy.
  • l là viết tắt của "hiển thị tên tệp, không phải kết quả chính nó".
  • / là viết tắt của bắt đầu từ gốc của máy của bạn.
1279
fedorqui

Bạn có thể sử dụng ack . Nó giống như grep cho mã nguồn. Bạn có thể quét toàn bộ hệ thống tập tin của bạn với nó.

Cứ làm đi:

ack 'text-to-find-here'

Trong thư mục gốc của bạn.

Bạn cũng có thể sử dụng biểu thức chính quy , chỉ định kiểu tệp, v.v.


CẬP NHẬT

Tôi mới phát hiện ra Trình tìm kiếm bạc , giống như ack nhưng nhanh hơn 3-5 lần so với nó và thậm chí bỏ qua các mẫu từ tệp .gitignore.

283
EarlOfEgo

Bạn có thể dùng:

grep -r "string to be searched"  /path/to/dir

r là viết tắt của đệ quy và do đó sẽ tìm kiếm trong đường dẫn được chỉ định và các thư mục con của nó. Điều này sẽ cho bạn biết tên tệp cũng như in ra dòng trong tệp nơi chuỗi xuất hiện.

Hoặc một lệnh tương tự như lệnh bạn đang thử (ví dụ :) để tìm kiếm trong tất cả các tệp javascript (* .js):

find . -name '*.js' -exec grep -i 'string to search for' {} \; -print

Điều này sẽ in các dòng trong các tệp mà văn bản xuất hiện, nhưng nó không in tên tệp.

Ngoài lệnh này, chúng ta cũng có thể viết lệnh này: grep -rn "Chuỗi để tìm kiếm"/path/to/thư mục/hoặc/file -r: tìm kiếm đệ quy n: số dòng sẽ được hiển thị cho các trận đấu

156
learner_19

Bạn có thể sử dụng điều này:

grep -inr "Text" folder/to/be/searched/
98
A R

Danh sách tên tệp chứa văn bản đã cho

Trước hết, tôi tin rằng bạn đã sử dụng -H thay vì -l. Ngoài ra, bạn có thể thử thêm văn bản bên trong dấu ngoặc kép theo sau là {} \.

find / -type f -exec grep -l "text-to-find-here" {} \; 

Thí dụ

Giả sử bạn đang tìm kiếm các tệp chứa văn bản cụ thể "Giấy phép Apache" trong thư mục của bạn. Nó sẽ hiển thị kết quả tương tự như bên dưới (đầu ra sẽ khác nhau dựa trên nội dung thư mục của bạn).

bash-4.1$ find . -type f -exec grep -l "Apache License" {} \; 
./net/Java/jvnet-parent/5/jvnet-parent-5.pom
./commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.pom
./io/swagger/swagger-project/1.5.10/swagger-project-1.5.10.pom
./io/netty/netty-transport/4.1.7.Final/netty-transport-4.1.7.Final.pom
./commons-codec/commons-codec/1.9/commons-codec-1.9.pom
./commons-io/commons-io/2.4/commons-io-2.4.pom
bash-4.1$ 

Loại bỏ trường hợp nhạy cảm

Ngay cả khi bạn không sử dụng về trường hợp như "văn bản" so với "văn bản", bạn có thể sử dụng công tắc -i để bỏ qua trường hợp. Bạn có thể đọc thêm chi tiết tại đây .

Hy vọng điều này sẽ giúp bạn.

59
lkamal

Nếu grep của bạn không hỗ trợ tìm kiếm đệ quy, bạn có thể kết hợp find với xargs:

find / -type f | xargs grep 'text-to-find-here'

Tôi thấy điều này dễ nhớ hơn định dạng cho find -exec.

Điều này sẽ xuất tên tệp và nội dung của dòng phù hợp, ví dụ:.

/home/rob/file:text-to-find-here

Cờ tùy chọn bạn có thể muốn thêm vào grep:

  • -i - tìm kiếm không phân biệt chữ hoa chữ thường
  • -l - chỉ xuất tên tệp nơi tìm thấy kết quả khớp
  • -h - chỉ xuất dòng phù hợp (không phải tên tệp)
51
RobEarl

grep ( GNU hoặc BSD )

Bạn có thể sử dụng công cụ grep để tìm kiếm đệ quy thư mục hiện tại, như:

grep -r "class foo" .

Lưu ý: -r - Thư mục con tìm kiếm đệ quy.

Bạn cũng có thể sử dụng cú pháp toàn cầu để tìm kiếm trong các tệp cụ thể, chẳng hạn như:

grep "class foo" **/*.c

Lưu ý: Bằng cách sử dụng tùy chọn toàn cầu (**), nó sẽ quét tất cả các tệp theo cách đệ quy với phần mở rộng hoặc mẫu cụ thể. Để bật cú pháp này, hãy chạy: shopt -s globstar . Bạn cũng có thể sử dụng **/*.* cho tất cả các tệp (không bao gồm ẩn và không có phần mở rộng) hoặc bất kỳ mẫu nào khác.

Nếu bạn có lỗi rằng đối số của bạn quá dài, hãy xem xét thu hẹp tìm kiếm của bạn hoặc sử dụng cú pháp find thay vì:

find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'

Hoặc sử dụng ripgrep .

ripgrep

Nếu bạn đang làm việc trên các dự án lớn hơn hoặc các tệp lớn, bạn nên sử dụng ripgrep thay vào đó, như:

rg "class foo" .

Kiểm tra tài liệu, các bước cài đặt hoặc mã nguồn trên trang dự án GitHub .

Nó nhanh hơn nhiều so với bất kỳ công cụ nào khác như GNU / BSDgrep , ucg , ag , sift , ack , _ = /, pt hoặc tương tự, vì nó được xây dựng trên đỉnh Công cụ regex của Rust sử dụng automata hữu hạn, SIMD và tối ưu hóa theo nghĩa đen tích cực để giúp tìm kiếm rất nhanh.

Nó hỗ trợ bỏ qua các mẫu được chỉ định trong các tệp .gitignore, do đó, một đường dẫn tệp duy nhất có thể được khớp với nhiều mẫu toàn cục cùng một lúc.


Bạn có thể sử dụng các tham số phổ biến như:

  • -i - Tìm kiếm không nhạy cảm.
  • -I - Bỏ qua các tệp nhị phân.
  • -w - Tìm kiếm toàn bộ từ (ngược lại với kết hợp Word một phần).
  • -n - Hiển thị dòng của trận đấu của bạn.
  • -C/--context (ví dụ: -C5) - Tăng ngữ cảnh, do đó bạn sẽ thấy mã xung quanh.
  • --color=auto - Đánh dấu văn bản phù hợp.
  • -H - Hiển thị tên tệp nơi tìm thấy văn bản.
  • -c - Hiển thị số dòng phù hợp. Có thể kết hợp với -H.
50
kenorb
grep -insr "pattern" *
  • i: Bỏ qua sự phân biệt trường hợp trong cả tệp MẪU và tệp đầu vào.
  • n: Tiền tố mỗi dòng đầu ra với số dòng 1 dựa trên tệp đầu vào của nó.
  • s: Loại bỏ các thông báo lỗi về các tệp không tồn tại hoặc không thể đọc được.
  • r: Đọc tất cả các tệp trong mỗi thư mục, theo cách đệ quy.
38
enfinet

Thử:

find . -name "*.txt" | xargs grep -i "text_pattern"
27
venkat

Làm cách nào để tìm tất cả các tệp chứa văn bản cụ thể trên Linux? (...)

Tôi đã xem qua giải pháp này hai lần:

find / -type f -exec grep -H 'text-to-find-here' {} \;


Nếu sử dụngfindlike trong ví dụ của bạn, tốt hơn hãy thêm -s (--no-messages) vào grep2>/dev/null ở cuối lệnh để tránh nhiều tin nhắn Quyền bị từ chối được cấp bởi grepfind:

find / -type f -exec grep -sH 'text-to-find-here' {} \; 2>/dev/null

findlà công cụ tiêu chuẩn để tìm kiếm tệp - kết hợp với grep khi tìm văn bản cụ thể - trên các nền tảng giống như Unix. Lệnh find thường được kết hợp với xargs , bằng cách này.

Công cụ nhanh hơn và dễ dàng hơn tồn tại cho cùng một mục đích - xem bên dưới. Tốt hơn hãy thử chúng, miễn là chúng có sẵn trên nền tảng của bạn, tất nhiên:

Các lựa chọn thay thế nhanh hơn và dễ dàng hơn

RipGrep- công cụ tìm kiếm nhanh nhất xung quanh:

rg 'text-to-find-here' / -l

Trình tìm kiếm bạc:

ag 'text-to-find-here' / -l

ack:

ack 'text-to-find-here' / -l

Lưu ý: Bạn cũng có thể thêm 2>/dev/null vào các lệnh này để ẩn nhiều thông báo lỗi.


Cảnh báo : trừ khi bạn thực sự không thể tránh được, đừng tìm kiếm từ '/' (thư mục gốc) để tránh tìm kiếm dài và không hiệu quả ! Vì vậy, trong các ví dụ ở trên, bạn nên thay thế '/' bằng tên thư mục con, ví dụ: "/ home" tùy thuộc vào nơi bạn thực sự muốn tìm kiếm ...

27
Bludzee

Có một tiện ích mới gọi là The Silversearcher

Sudo apt install silversearcher-ag

Nó hoạt động chặt chẽ với Git và các VCS khác. Vì vậy, bạn sẽ không nhận được bất cứ điều gì trong .git hoặc thư mục khác.

Bạn chỉ có thể sử dụng

ag -ia "Search query"

Và nó sẽ làm nhiệm vụ cho bạn!

27
Neil Agarwal

Sử dụng pwd để tìm kiếm từ bất kỳ thư mục nào bạn đang truy cập, đệ quy xuống

grep -rnw `pwd` -e "pattern"

Cập nhật Tùy thuộc vào phiên bản grep bạn đang sử dụng, bạn có thể bỏ qua pwd. Trên các phiên bản mới hơn, . dường như là trường hợp mặc định cho grep nếu không có thư mục nào được đưa ra:

grep -rnw -e "pattern"

hoặc là

grep -rnw "pattern"

sẽ làm điều tương tự như trên!

26
mahatmanich

grep có thể được sử dụng ngay cả khi chúng tôi không tìm kiếm một chuỗi.

Đơn giản là chạy

grep -RIl "" .

sẽ in ra đường dẫn đến tất cả các tệp văn bản, tức là những tệp chỉ chứa các ký tự có thể in được.

18
Alex Jasmin

Dưới đây là danh sách một số lệnh có thể được sử dụng để tìm kiếm tệp.

grep "text string to search” directory-path

grep [option] "text string to search” directory-path

grep -r "text string to search” directory-path

grep -r -H "text string to search” directory-path

egrep -R "Word-1|Word-2” directory-path

egrep -w -R "Word-1|Word-2” directory-path
16
Atul Arvind

Một find đơn giản có thể hoạt động tiện dụng. bí danh nó trong tệp ~/.bashrc của bạn:

alias ffind find / -type f | xargs grep

Bắt đầu một thiết bị đầu cuối mới và vấn đề:

ffind 'text-to-find-here'
14
danglingpointer
find /path -type f -exec grep -l "string" {} \;

Giải thích từ ý kiến

find là một lệnh cho phép bạn tìm các tệp và các đối tượng khác như thư mục và liên kết trong các thư mục con của một đường dẫn cụ thể. Nếu bạn không chỉ định một mặt nạ mà tên tệp sẽ đáp ứng, nó liệt kê tất cả các đối tượng thư mục.

-type f specifies that it should proceed only files, not directories etc.
-exec grep specifies that for every found file, it should run grep command, passing its filename as an argument to it, by replacing {} with the filename
14
Vinod Joshi

Hy vọng đây là sự giúp đỡ ...

Mở rộng grep một chút để cung cấp thêm thông tin trong đầu ra, ví dụ, để lấy số dòng trong tệp nơi văn bản có thể được thực hiện như sau:

find . -type f -name "*.*" -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

Và nếu bạn có ý tưởng loại tệp là gì, bạn có thể thu hẹp tìm kiếm của mình bằng cách chỉ định các tiện ích mở rộng loại tệp để tìm kiếm, trong trường hợp này là .pas OR .dfm tệp:

find . -type f \( -name "*.pas" -o -name "*.dfm" \) -print0 | xargs --null grep --with-filename --line-number --no-messages --color --ignore-case "searchtext"

Giải thích ngắn về các tùy chọn:

  1. . trong find chỉ định từ thư mục hiện tại.
  2. -name "*.*": cho tất cả các tệp (-name "*.pas" -o -name "*.dfm"): Chỉ các tệp *.pas OR *.dfm, OR được chỉ định với -o
  3. -type f chỉ định rằng bạn đang tìm kiếm tệp
  4. -print0--null ở phía bên kia của | (ống) là những yếu tố quan trọng, chuyển tên tệp từ find sang grep được nhúng trong xargs, cho phép truyền tên tệp với khoảng trắng trong tên tệp và tên tệp là một chuỗi, và không phá vỡ nó trên mỗi không gian.
14
Gert van Biljon

Silver Searcher là một công cụ tuyệt vời, nhưng ripgrep có thể còn tốt hơn nữa.

Nó hoạt động trên Linux, Mac và Windows, và đã được viết trên Hacker News một vài tháng trước (đây có liên kết đến Blog của Andrew Gallant có liên kết GitHub):

Ripgrep - Công cụ tìm kiếm dòng lệnh mới

14
AAAfarmclub

Thử:

find / -type f -exec grep -H 'text-to-find-here' {} \;

sẽ tìm kiếm tất cả các hệ thống tệp, vì / là thư mục gốc.

Đối với thư mục nhà sử dụng:

find ~/ -type f -exec grep -H 'text-to-find-here' {} \;

Đối với thư mục hiện tại sử dụng:

find ./ -type f -exec grep -H 'text-to-find-here' {} \;
14
user4863663

Tôi đã viết một Python script mà làm một cái gì đó tương tự. Đây là cách người ta nên sử dụng kịch bản này.

./sniff.py path pattern_to_search [file_pattern]

Đối số đầu tiên, path, là thư mục mà chúng ta sẽ tìm kiếm đệ quy. Đối số thứ hai, pattern_to_search, là một biểu thức chính quy mà chúng ta muốn tìm kiếm trong một tệp. Chúng tôi sử dụng định dạng biểu thức chính quy được xác định trong thư viện Pythonre. Trong tập lệnh này, . cũng khớp với dòng mới.

Đối số thứ ba, file_pattern, là tùy chọn. Đây là một biểu thức chính quy khác hoạt động trên tên tệp. Chỉ những tệp phù hợp với biểu thức chính quy này mới được xem xét.

Ví dụ: nếu tôi muốn tìm kiếm các tệp Python có phần mở rộng py chứa Pool( theo sau là Word Adaptor, tôi làm như sau,

./sniff.py . "Pool(.*?Adaptor"  .*py
./Demos/snippets/cubeMeshSigNeur.py:146 
./Demos/snippets/testSigNeur.py:259 
./python/moose/multiscale/core/mumbl.py:206 
./Demos/snippets/multiComptSigNeur.py:268 

Và voila, nó tạo ra đường dẫn của các tệp và số dòng trùng khớp mà tại đó kết quả khớp được tìm thấy. Nếu tìm thấy nhiều kết quả trùng khớp, thì mỗi số dòng sẽ được thêm vào tên tệp.

13
Dilawar

Sử dụng:

grep -c Your_Pattern *

Điều này sẽ báo cáo có bao nhiêu bản sao của mẫu của bạn trong mỗi tệp trong thư mục hiện tại.

12
Dr_Hope

grep là người bạn tốt của bạn để đạt được điều này.

grep -r <text_fo_find> <directory>

nếu bạn không quan tâm đến trường hợp văn bản cần tìm thì hãy sử dụng

grep -ir <text_to_find> <directory>
11
Prash

Tất cả các câu trả lời trước đề nghị grep và tìm. Nhưng có một cách khác: Sử dụng Chỉ huy nửa đêm

Nó là một tiện ích miễn phí (30 tuổi, được chứng minh theo thời gian) trực quan mà không phải là GUI. Nó có vô số chức năng và việc tìm kiếm các tập tin chỉ là một trong số đó.

11
Peter M.

Để tìm kiếm chuỗi và xuất ra chỉ dòng đó với chuỗi tìm kiếm:

for i in $(find /path/of/target/directory -type f); do grep -i "the string to look for" "$i"; done

ví dụ.:

for i in $(find /usr/share/applications -type f); \
do grep -i "web browser" "$i"; done

Để hiển thị tên tệp chứa chuỗi tìm kiếm:

for i in $(find /path/of/target/directory -type f); do if grep -i "the string to look for" "$i" > /dev/null; then echo "$i"; fi; done;

ví dụ.:

for i in $(find /usr/share/applications -type f); \
do if grep -i "web browser" "$i" > /dev/null; then echo "$i"; \
fi; done;
11
user3124504

Có một công cụ ack sẽ làm chính xác những gì bạn đang tìm kiếm.

http://linux.die.net/man/1/ack

ack -i search_string folder_path/*

Bạn có thể bỏ qua -i cho tìm kiếm phân biệt chữ hoa chữ thường

11
Pal

Lệnh dưới đây sẽ hoạt động tốt cho phương pháp này:

find ./ -name "file_pattern_name"  -exec grep -r "pattern" {} \;
10
Pradeep Goswami

Thử đi:

find . | xargs grep 'Word' -sl
10
Tayab Hussain

Tôi bị mê hoặc bởi cách grep đơn giản làm cho nó với 'rl'

grep -rl 'pattern_to_find' /path/where/to/find

-r to find recursively file / directory inside directories..
-l to list files matching the 'pattern'

Sử dụng '-r' không có 'l' để xem tên tệp được theo sau bởi văn bản trong đó mẫu được tìm thấy !

grep -r 'pattern_to_find' /path/where/to/find

Hoạt động hoàn hảo ..

Hy vọng nó giúp!

10
nitinr708

Bạn có thể sử dụng lệnh dưới đây vì bạn không muốn tên tệp nhưng bạn muốn tìm kiếm từ tất cả các tệp. Dưới đây là tôi đang chụp mẫu "văn bản" Tất cả các tệp nhật ký đảm bảo rằng tên tệp không được in

grep -e TEXT *.log | cut -d' ' --complement -s -f1

grep with -e tùy chọn khá nhanh so với tùy chọn khác vì nó phù hợp với MẪU

10
Mitul Patel

Tránh những rắc rối và cài đặt ack-grep. Nó loại bỏ rất nhiều vấn đề cho phép và báo giá.

apt-get install ack-grep

Sau đó vào thư mục bạn muốn tìm kiếm và chạy lệnh bên dưới

cd /
ack-grep "find my keyword"
10
Kareem

Nếu bạn thực sự muốn sử dụng find thì:

find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;

find + grep

1.Sử dụng find để tìm kiếm tệp, 2.Sau đó thực thi grep trên tất cả chúng.

Có thể được kết hợp trong một lệnh như dưới đây:

find /path/to/somewhere/ -type f -exec grep -nw 'textPattern' {} \;

  • Sử dụng -name Pattern nếu bạn muốn grep chỉ một số tệp nhất định:

    find /path/to/somewhere/ -type f -name \*.cpp -exec grep -nw 'textPattern' {} \;

Điều này có thể cung cấp cho bạn sức mạnh của find để tìm tệp. Bạn có thể chơi với nó và sử dụng các tùy chọn khác nhau của find để cải thiện hoặc thu hẹp tìm kiếm tệp của bạn.

8
BreakBadSP

findvới xargname__s được ưa thích khi có nhiều kết quả trùng khớp tiềm năng để sàng lọc. Nó chạy chậm hơn các tùy chọn khác, nhưng nó luôn hoạt động. Như một số người đã phát hiện ra, xargskhông xử lý các tệp có khoảng trắng được nhúng theo mặc định. Bạn có thể khắc phục điều này bằng cách chỉ định tùy chọn -d.

Đây là câu trả lời của @ RobEarl, được cải tiến để nó xử lý các tệp có khoảng trắng:

find / -type f | xargs -d '\n' grep 'text-to-find-here'

Đây là câu trả lời của @ venkat, được tăng cường tương tự:

find . -name "*.txt" | xargs -d '\n' grep -i "text_pattern"

Đây là câu trả lời của @Gert van Biljon, được tăng cường tương tự:

find . -type f -name "*.*" -print0 | xargs -d '\n' --null grep --with-filename --line-number --no-messages --color --ignore-case "searthtext"

Đây là câu trả lời của @ LetalProgrammer, được tăng cường tương tự:

alias ffind find / -type f | xargs -d '\n' grep

Đây là câu trả lời của @Tayab Hussain, được tăng cường tương tự:

find . | xargs -d '\n' grep 'Word' -sl
7
Mike Slinn

Nếu bạn có một tập hợp các tệp mà bạn sẽ luôn kiểm tra, bạn có thể đặt bí danh đường dẫn của chúng, ví dụ:

alias fd='find . -type f -regex ".*\.\(inc\|info\|module\|php\|test\|install\|uninstall\)"'

Sau đó, bạn có thể chỉ cần lọc danh sách như thế này:

grep -U -l $'\015' $(fd)

Mà lọc ra danh sách fd đến các tệp có chứa mẫu CR.

Tôi thấy rằng việc đặt bí danh cho các tệp mà tôi quan tâm giúp tôi tạo các tập lệnh dễ dàng hơn sau đó luôn cố gắng nhớ cách lấy tất cả các tệp đó. Các công cụ đệ quy cũng hoạt động nhưng sớm hay muộn bạn sẽ phải tranh luận với việc loại bỏ các loại tệp cụ thể. Đó là lý do tại sao tôi chỉ tìm thấy tất cả các loại tệp mà tôi quan tâm để bắt đầu.

7
dkinzer

Thử đi:

find / -type f -name "*" -exec grep -il "String_to_search" {} \;

Hoặc là

for i in /*;do grep -Ril "String_to_search" $i;done 2> /dev/null
7
VIPIN KUMAR

Sử dụng:

grep -Erni + "text you wanna search"

Lệnh sẽ tìm kiếm đệ quy trong tất cả các tệp và thư mục của thư mục hiện tại và in kết quả.

Lưu ý: nếu đầu ra grep của bạn không có màu, bạn có thể thay đổi nó bằng cách sử dụng bí danh grep = 'grep --color = always' trong tệp nguồn Shell của bạn.

7
baldash

Bạn có thể sử dụng các lệnh sau để tìm văn bản cụ thể từ một tệp:

cat file | grep 'abc' | cut -d':' -f2
7
iamjayp

Như Peter trong câu trả lời trước đã đề cập , tất cả các câu trả lời trước gợi ý grep và find.

Nhưng có một cách tinh vi hơn bằng cách sử dụng Gnome Commander với sự hoàn hảoGUIvà với hàng tấn tùy chọn kể từ năm 2001, và việc tìm kiếm tệp chỉ là một trong số đó. Nó là một tiện ích miễn phí là tốt, được chứng minh bởi thời gian.

7
Geeocode

Thử đi

find . -type f -name some_file_name.xml -exec grep -H PUT_YOUR_STRING_HERE {} \;
6
Sireesh Yarlagadda

Xem thêm Trình tìm kiếm bạch kim , tương tự như Trình tìm kiếm bạc và nó được viết bằng Go.

Thí dụ:

pt -e 'text to search'
5
Gustavo Paulo

Thay thế tìm kiếm GUI - Sử dụng cho máy tính để bàn:

- Vì câu hỏi không chính xác là yêu cầu các lệnh

Searchmonkey : Công cụ tìm kiếm tệp nâng cao mà không phải lập chỉ mục hệ thống của bạn bằng biểu thức thông thường. Đồ họa tương đương với find/grep. Có sẵn cho Linux (Gnome/KDE/Java) và Windows (Java) - GPL v3 mã nguồn mở

Tính năng:

  • Biểu thức chính quy nâng cao
  • Kết quả hiển thị trong ngữ cảnh
  • Tìm kiếm có chứa văn bản
  • Bảng để hiển thị dòng chứa văn bản
  • Cập nhật mới 2018
  • v.v.

Tải xuống - Liên kết:

.

Ảnh chụp màn hình:

 Enter image description here 

5
intika

lệnh của bạn là chính xác. Chỉ cần thêm -l vào grep.

find / -type f -exec grep -l 'text-to-find-here' {} \;
0
FariZ