it-swarm.asia

Grep ve dosya desenleriyle özyinelemeli metin araması

Bu örnek klasör yapısı göz önüne alındığında:

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

"/" Klasöründen grep içeren tüm *.txt Dosyalarında özyinelemeli metin araması nasıl yapabilirim?

("grep -r <pattern> *.txt", "/" Klasöründen çalıştırıldığında başarısız oluyor çünkü bu klasörde .txt Dosya yok.)

46
Anders Sandvig

GNU Grep sürümünde bunun için bir anahtar var:

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

Aşağıdaki gibi açıklanmıştır:

--include=GLOB

Yalnızca temel adı GLOB ile eşleşen dosyaları arayın (--exclude altında açıklandığı gibi joker karakter eşleşmesini kullanarak).

62
Kyle Brandt

Çok sayıda dosyanız varsa, 'Argument list çok uzun' hatasını önlemek için xargs komutunu dahil etmek yararlı olacaktır.

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

zsh 's EXTENDED_GLOB seçenek ( dokümanlar )

grep <pattern> **/*.txt
2
santa

Dosya türüne göre aranacak dosyaları seçmek için olanaklara sahip olan http://betterthangrep.com adresindeki ack'e bakmak isteyebilirsiniz.

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

Mannis'in cevabı, her bir metin dosyası için yeni bir grep sürecini destekleyecekti. Orada lot metin dosyalarınız varsa, önce her dosyayı açmayı düşünebilir ve bittiğinde .txt dosyalarını seçebilirsiniz:

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

Bu daha fazla disk yoğundur, ancak yine de daha hızlı olabilir.

0
Commander Keen

2019 ve grep'i yinelemeli metin araması için kullanmamın hiçbir yolu yok.

IMHO bugünün cevapları içermelidir ripgrep :

rg <pattern> -ttxt
0
santa