Listen Sie die Dateien auf, die ein bestimmtes Wort im Text enthalten

30

Ich möchte die Dateien rekursiv und eindeutig auflisten, die das angegebene Wort enthalten.

Beispiel : Wenn ich nach dem Wort 'check' suche, mache ich normalerweise ein Grep

$ grep check * -R

Da dieses Wort jedoch häufig vorkommt, wird viel ausgegeben. Also muss ich nur die Dateinamen auflisten, die das angegebene Suchwort enthalten. Ich denke, ein Trick mit findund xargswürde hier ausreichen, aber nicht sicher.

Irgendwelche Ideen?

mtk
quelle

Antworten:

39

Verwenden Sie die Option -loder, --files-with-matchesdie wie folgt dokumentiert ist:

Normale Ausgabe unterdrücken; Drucken Sie stattdessen den Namen jeder Eingabedatei, aus der normalerweise die Ausgabe gedruckt worden wäre. Der Scanvorgang wird beim ersten Treffer angehalten. ( -lwird von POSIX angegeben.)

Für Ihr Beispiel können Sie also Folgendes verwenden:

$ grep check * -lR
NN
quelle
Funktioniert auch auf MSYS. Groß!
Kos
2
Ich habe es benutzt grep -rl "text to find" "/usr/share"und es hat super funktioniert!
Shrout1
18
find . -type f -exec grep -l check {} +

Sie möchten wahrscheinlich nicht die -ROption verwenden, die in modernen GNU-Versionen grepbeim Abstieg in Verzeichnisse Symlinks folgt. Verwenden Sie -rstattdessen die Option dort, die seit Version 2.12 (April 2012) keinen Symlinks mehr folgt.

Wenn Ihr grep nicht GNU ist oder älter als Version 2.12, oder wenn Sie Ihren Code auf GNU-Systeme portieren möchten, die nicht auf dem neuesten Stand sind, verwenden Sie den findobigen Befehl.

Ansonsten können Sie Folgendes tun:

grep -rl check .

Verwenden Sie *diese Option nicht (da dadurch ausgeblendete Dateien im aktuellen Verzeichnis (und nur im aktuellen Verzeichnis) ausgelassen werden und Probleme bei Dateien auftreten, deren Name mit a beginnt -). Vermeiden Sie die Übergabe von Optionen nach Argumenten, da dies abhängig von der nicht garantiert funktioniert Umwelt und ist nicht tragbar.

Stéphane Chazelas
quelle
1

Versuche dies:

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

Was die grepFahnen betrifft ...

-c Gibt einen Dateinamen gefolgt von: und eine Zahl zurück, die angibt, wie oft die Suchzeichenfolge in der angegebenen Datei vorkommt.

-vübernimmt die Ausgabe der ersten grepSuche, filtert die Dateien mit Null-Ergebnissen heraus und druckt nur die Dateien mit Nicht-Null-Ergebnissen aus.

Brightwellcd
quelle
Dies wird falsch negativ, wenn Sie Dateien (oder Direktoren) haben, deren Namen enthalten :0. Es ist besser zu tun grep -v ':0$'. Sogar das wird an Pfadnamen ersticken, die Zeilenumbrüche enthalten.
Scott
0

grep -rin "whatToFind" locationToFInd

zB $ grep -rin "vihaan".

sucht und listet rekursiv Dateinamen und die entsprechenden Zeilen auf, in denen "vihaan", "." verweist auf das aktuelle Verzeichnis.

Vihaan Verma
quelle
0
find . -type f | grep "keyword" *

Suche im aktuellen Verzeichnis. Geben Sie /anstelle von Folgendes an, um von root nachzuschlagen.

Maniraja Jorige
quelle
0

grep -lR "text-to-find" <where-to-find> funktioniert auch gut.

zB grep -lR "NAVIGATE" .wo wir das Wort NAVIGATEim .im aktuellen Verzeichnis finden.

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

Geben Sie die Liste der .qDateien enthält das Schlüsselworttrim

Mithun
quelle