Metinlerinde belirli bir kelimeyi içeren dosyaları listeler.


30

Verilen sözcüğü içeren dosyaları özyinelemeli ve benzersiz bir şekilde listelemek istiyorum.

Örnek : 'check' kelimesini kontrol ediyorum, normal yapıyorum bir grep

$ grep check * -R

Ancak bu kelimenin pek çok tekrarı olduğu için çok fazla çıktı alıyorum. Bu yüzden verilen arama sözcüğünü içeren dosya adlarını listelemem gerekiyor. Sanırım biraz hile var findve xargsburada yeterli olur, ama kesin değil.

Herhangi bir fikir?

Yanıtlar:


39

Aşağıdaki şekilde belgelenen -lveya --files-with-matchesseçeneğini kullanın :

Normal çıktıyı bastır; bunun yerine, çıktının normal olarak yazdırılacağı her giriş dosyasının adını yazdırın. İlk maçta tarama duracaktır. ( -lPOSIX tarafından belirtilmiştir.)

Yani, sizin için örneğin aşağıdakileri kullanabilirsiniz:

$ grep check * -lR

MSYS üzerinde de çalışır. Harika!
İstanköy

2
Ben kullandım grep -rl "text to find" "/usr/share"ve harika çalıştı!
Kapanış tarihi:

18
find . -type f -exec grep -l check {} +

Muhtemelen -RGNU'nun modern versiyonlarında, grepdizinleri indirirken sembolik izleri olan seçeneği kullanmak istemezsiniz . Kullanım -rsürümü 2.12 (Nisan 2012) beri artık sembolik bağları takip yerine orada seçeneği.

Grep'iniz GNU değilse veya 2.12 sürümünden daha eskiyse veya kodunuzun kanama yapmayan GNU sistemlerine taşınabilir olması için findyukarıdaki komutu kullanın .

Aksi takdirde şunları yapabilirsiniz:

grep -rl check .

Kullanmayın *(bu, geçerli dizindeki (ve yalnızca geçerli dizindeki) gizli dosyaları çıkarır ve adı a ile başlayan dosyalar için sorunlara neden olur -), bağımlılığa göre çalışması garanti edilmediğinden, seçeneklerden sonra seçenekleri iletmekten kaçının çevre ve taşınabilir değil.


1

Bunu dene:

find . -type f | xargs grep -c check $1 | grep -v ":0"

grepBayraklara gelince ...

-c ardından bir dosya adı döndürecektir: ve arama dizgisinin verilen dosyada kaç kez göründüğünü belirten bir sayı.

-vilk greparamadan çıktıyı alacak, sıfır sonuç veren dosyaları filtreleyecek ve sadece sıfır olmayan sonuçlara sahip dosyaları yazdıracaktır.


Bu isimleri içeren dosya (lar) (ya da yönetmen (ler)) varsa, yanlış negatif olacaktır :0. Yapması daha iyi grep -v ':0$'. Bu bile newline (ler) içeren patikalarda boğulacak.
Scott

0

grep -rin "whatToFind" locationToFInd

örneğin $ grep -rin "vihaan".

dosya adlarını ve içinde "vihaan" bulunan karşılık gelen satırları tekrar tekrar arayacak ve listeleyecektir. geçerli dizini ifade eder.


0
find . -type f | grep "keyword" *

geçerli dizinde ara. Kökten arama yapmak için, /yerine belirtin.


0

grep -lR "text-to-find" <where-to-find> ayrıca iyi çalışıyor.

örneğin grep -lR "NAVIGATE" .biz kelime bulmak NAVIGATEiçinde .geçerli dizinde.


-2
 grep -rli trim \` find . -name *.q \` 

Size .qanahtar kelime içeren dosyaların listesini verintrim

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.