Wie gebe ich grep an, dass ich bei der rekursiven Suche ein Pfadpräfix auswählen möchte?

Wie gebe ich grep an, dass ich bei der rekursiven Suche ein Pfadpräfix auswählen möchte?

Beispiel. Ich habe ein Wort, nach dem ich suche, sagen wir"Katze". Und ich weiß, dass das Wort überall im aktuellen Arbeitsverzeichnis zu finden ist. Also verwende ichgrep -r, und dies ergibt die Ergebnisse in der folgenden Form:

./Beispielstammverzeichnis/[Verzeichnis1|Verzeichnis2]/[EIN BELIEBIGER UNTERPFAD]/cat_file,

Wo

cat_datei

ist die Datei, die das Wort enthält"Katze". Was ist, wenn ich nur interessiert bin an

/Beispielstammverzeichnis/dir1/[beliebiger_Pfad]

Präfix für meinen Pfad? Wie sage ich esgrep?

Antwort1

ich würde versuchen

grep -rl cat directory | xargs dirname

Wo

  • grep -rl cat directory Suche rekursiv ( -r) nach cat im Verzeichnis und ( -l) nach lisy-Dateien.
  • | xargs dirnamejede Datei wird an „gegeben“ dirname, wodurch ein Dateiteil entfernt wird.

Antwort2

@Kusalanandas Antwort in den Kommentaren ist, was ich wollte: einfach tun

grep -r 'cat' /example_root/dir1/

Wenn Sie jedoch Verzeichnisnamen abrufen möchten, in denen sich die Wörter befinden, ist Folgendes (Mit freundlicher Genehmigung von @Archemar) praktisch.

grep -rl cat directory | xargs dirname

verwandte Informationen