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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.