Pencarian teks rekursif dengan pola grep dan file


46

Diberikan contoh struktur folder ini:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

Bagaimana cara saya melakukan pencarian teks rekursif pada semua *.txtfile dengan grepdari "/"?

( "grep -r <pattern> *.txt"gagal ketika dijalankan dari "/", karena tidak ada .txtfile di folder itu.)

Jawaban:


61

Versi GNU Grep saya memiliki saklar untuk ini:

grep -R --include='*.txt' $Pattern

Dijelaskan sebagai berikut:

--include=GLOB

Cari hanya file yang nama dasarnya cocok dengan GLOB (menggunakan pencocokan wildcard seperti yang dijelaskan pada --exclude).


19

Jika Anda memiliki banyak file, akan berguna untuk memasukkan xargs ke dalam perintah untuk menghindari kesalahan 'Daftar argumen terlalu panjang'.

find . -name '*.txt' -print | xargs grep <pattern>

6
Jika ada spasi di salah satu nama file atau direktori, gunakan formulir ini: find. -nama '* .txt' -print0 | xargs -0 grep <pattern>
Jason Luther

2
Dan tentu saja ada masalah nama file yang dimulai dengan -.
TJ Crowder

greplebih cepat dari find.
Nabi KAZ

2

Anda mungkin bisa memanfaatkan Anda zsh's EXTENDED_GLOBpilihan ( docs )

grep <pattern> **/*.txt

Hanya jika OP menggunakan zsh, namun tetap menarik.
Law29


0
find . -name '*.txt' -type f -exec grep <pattern> {} \;

Anda mungkin ingin menggunakan "find. -name '* .txt' -type f -exec grep <pattern> {} +" sebagai gantinya sehingga agak berperilaku serupa dengan verifikasi dari Mark Robinson - hanya bekerja dengan GNU, setahu saya.
serverhorror

0

Jawaban Mannis akan melakukan proses grep baru untuk setiap file teks. Jika Anda memiliki banyak file teks di sana, Anda dapat mempertimbangkan untuk menangkap setiap file terlebih dahulu dan memilih file .txt ketika itu dilakukan:

grep -r <pattern> * | grep \.txt:

Itu lebih intensif disk, tetapi mungkin lebih cepat pula.


0

Ini tahun 2019 dan tidak mungkin saya masih menggunakan grep untuk pencarian teks rekursif.

Jawaban IMHO todays harus mencakup ripgrep :

rg <pattern> -ttxt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.