Cara menemukan file dengan teks tertentu di Terminal

168

Saya ingin mencari semua file yang berisi string teks tertentu. Bagaimana Anda melakukannya di Terminal?

Svish
sumber
Jika Anda menginginkan hasil yang cepat, gunakan Spotlight. Juga jika Anda ingin menemukan file yang tidak selalu menyimpan teks secara langsung di dalam file seperti PDF atau ODF.
Joey
Saran yang bagus, tetapi dalam kasus saya, saya tidak yakin file diindeks karena ada pada driver jaringan. Dan mereka juga file xml milik program tertentu.
Svish
Lihatlah unix.stackexchange.com/a/37932/213832 solusi ini berfungsi dengan baik
boyd4715

Jawaban:

280
grep -r 'text goes here' path_goes_here
Ignacio Vazquez-Abrams
sumber
1
Saya akan menyarankan man grepuntuk menemukan semua opsi bagus grep
Ludovic Kuty
Ini mencantumkan setiap file yang ada di jalur dan menambahkan: No such file or directory Saya mencoba untuk mendapatkan daftar kejadian teks saja. Bagaimana kita bisa mendapatkan daftar itu?
CP3O
7
Mendapatkannya: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O
Tapi ini mengembalikan konten file yang cocok, bukan detail file (nama, path). Saran @ CP3O bekerja.
geoteori
28

gunakan lampu sorot

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

jangan lupa untuk melihat:

man mdfind
pengguna46046
sumber
2
Apakah ini akan berfungsi untuk file yang sorotan tidak mengindeks (yaitu file di dalam folder tersembunyi, file konfigurasi sistem, dll)?
Peter Berg
Grep tampaknya tidak mem-parsing file .xlsx, tetapi ini berhasil dengan baik. Contoh mudah lainnya: mdfind -onlyin. "searchtext"
FvD
11
  1. Melalui Ack

brew install ack ack "text goes here"

  1. Melalui find

find . |grep "text goes here"

  1. Melalui grep

grep -RnslI "text goes here"

Anant Gupta
sumber
4

Anda dapat memilih salah satu di bawah ini tergantung pada selera dan kebutuhan Anda. Andaikan Anda perlu mencari file yang mengandung teks - "async", secara rekursif di direktori saat ini, Anda dapat melakukannya dengan salah satu cara seperti di bawah ini:

Menggunakan grep masukkan deskripsi gambar di sini

Menggunakan ack masukkan deskripsi gambar di sini

karthiks
sumber
2

Jawaban Ignacio luar biasa dan membantu saya menemukan file yang berisi teks tertentu. Satu-satunya masalah yang saya hadapi adalah ketika menjalankan perintah ini semua file akan terdaftar, termasuk satu di mana pola tidak muncul.

No such file or directory Inilah yang saya lihat di samping file yang tidak mengandung pola.

Jika sebaliknya Anda menambah -sperintah, seperti pada grep -lr "text pattern" ./ -s:; grep -lr "text pattern" [PATH DIRECTORY] -sdigunakan, itu hanya akan menunjukkan kepada Anda file mana yang berisi pola.

Demikian pula jika grep -nr "text pattern" ./ -s; grep -nr "text pattern" [PATH OF DIRECTORY] -sPerintah ini digunakan untuk mencetak file plus nomor baris, dan terjadinya pola.

Harap perbaiki saya jika pemahaman saya salah.

Referensi: Bagaimana saya bisa membuat grep tidak mencetak kesalahan 'Tidak ada file atau direktori'?

CP3O
sumber
Cara lain untuk menghindari kesalahan-kesalahan Tidak ada kesalahan file seperti itu , adalah untuk pipa stderr ke null. grep ... 2>/dev/null. Solusi ini berfungsi untuk sebagian besar program, karena mereka melaporkan pesan kesalahan pada aliran stderr, bukan stdout. Saya telah menggunakan solusi ini berkali-kali dengan find, karena akan mengatakan Izin ditolak untuk banyak file.
jpaugh
(1) Jika Anda mendapatkan No such file or directorypesan untuk file yang ada, apakah Anda melakukan sesuatu yang salah, atau sistem Anda rusak. (2) Apa yang [PATH OF PARENT]harus dilakukan dengan apa pun?
G-Man
@ G-Man Saya mengedit jawaban untuk menunjukkan [PATH OF DIRECTORY]hanya memetikan seseorang yang tidak dikenal ingin tahu mengapa saya menaruh./
CP3O
@ G-Man Saya menggunakan mac bukan Ubuntu, tidak yakin bagaimana sistem saya akan rusak, saya belum melakukan apa pun di dalamnya.
CP3O