Ich möchte die Dateien rekursiv und eindeutig auflisten, die das angegebene Wort enthalten.
Beispiel : Wenn ich nach dem Wort „check“ suche, ist das normalerweise ein grep
$ grep check * -R
Da dieses Wort jedoch häufig vorkommt, erhalte ich viel Ausgabe. Ich muss also nur die Dateinamen auflisten, die das angegebene Suchwort enthalten. Ich denke, ein Trick mit find
und xargs
würde hier ausreichen, ist sich aber nicht sicher.
Irgendwelche Ideen?
Antwort
Verwenden Sie die -l
oder --files-with-matches
Option, die 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 Spiel beendet. (
-l
wird von POSIX angegeben.)
Sie können also beispielsweise Folgendes verwenden:
$ grep check * -lR
Kommentare
- Funktioniert auch unter MSYS. Großartig!
- Ich habe
grep -rl "text to find" "/usr/share"
verwendet und es hat großartig funktioniert!
Antwort
find . -type f -exec grep -l check {} +
Sie möchten wahrscheinlich nicht die Option -R
verwenden, die in modernen Versionen von GNU grep
folgt beim Absteigen von Verzeichnissen Symlinks. Verwenden Sie stattdessen die Option -r
, die seit Version 2.12 (April 2012) keinen Symlinks mehr folgt.
Wenn Ihr grep nicht das GNU ist oder älter als Version 2.12 ist oder wenn Sie Ihren Code für nicht-GNU-Systeme ohne Aktualisierung portabel benötigen, verwenden Sie die find
oben.
Andernfalls können Sie Folgendes tun:
grep -rl check .
Verwenden Sie *
(da dies versteckte Dateien im aktuellen Verzeichnis (und nur im aktuellen Verzeichnis) weglassen und Probleme für Dateien verursachen würde, deren Name mit -
beginnt), vermeiden Sie das Übergeben Optionen nach Argumenten, da dies nicht garantiert ist Je nach Umgebung funktioniert es und ist nicht portabel.
Antwort
Versuchen Sie Folgendes:
find . -type f | xargs grep -c check $1 | grep -v ":0"
Wie für die grep
Flags …
-c
wird Geben Sie einen Dateinamen gefolgt von: und eine Zahl zurück, die angibt, wie oft die Suchzeichenfolge in der angegebenen Datei vorkommt.
-v
übernimmt die Ausgabe vom ersten grep
suchen, filtern Sie die Dateien mit Null-Ergebnissen heraus und drucken Sie nur die Dateien mit Nicht-Null-Ergebnissen aus.
Kommentare
- Dies wird falsch negativ, wenn Sie Dateien (oder Direktoren) haben, deren Namen
:0
enthalten. ' ist es besser,grep -v ':0$'
auszuführen. Selbst das verschluckt sich an Pfadnamen, die Zeilenumbrüche enthalten.
Antwort
grep -lR "text-to-find" <where-to-find>
funktioniert auch gut.
zB grep -lR "NAVIGATE" .
wo wir das Wort NAVIGATE
in der .
im aktuellen Verzeichnis.
Antwort
grep -rin „whatToFind“ locationToFInd
zB $ grep -rin „vihaan“.
sucht und listet rekursiv Dateinamen und die entsprechenden Zeilen mit „vihaan“ auf. “ bezieht sich auf das aktuelle Verzeichnis.
Antwort
find . -type f | grep "keyword" *
Suche im aktuellen Verzeichnis. Geben Sie zum Nachschlagen von root /
anstelle von .
Antwort
grep -rli trim \` find . -name *.q \`
Geben Sie die Liste der .q
-Dateien an, die das Schlüsselwort trim