grep für ein Wort, erwähnen Sie aber auch andere Wörter, die in der Datei erscheinen sollen

322
american-ninja-warrior

Ich suche nach Vorkommen des Wortes "Bild" in einem Ordner mit vielen Dateien und Unterordnern.

Die regulären grep-Befehle (grep und 'git grep') geben über tausend Übereinstimmungen zurück. Wie kann ich dem grep-Befehl etwas hinzufügen, um es zu sagen,

Msgstr "Find me-Dateien, die das 'Wort' enthalten, aber nur, wenn die Wörter 'Reporter' oder 'Herausgeber' in derselben Datei erwähnt werden

1

2 Antworten auf die Frage

1
Austin Hemmelgarn

Folgendes sollte funktionieren:

grep word `grep -E -l 'reporter|publisher'` 

Der grepBefehl in Backquotes generiert eine Liste von Dateien, die entweder 'reporter' oder 'publisher' enthalten ( -lweist grep an, Dateien, die übereinstimmen, anstelle der üblichen Ausgabe anzugeben, -Eist erforderlich, um sicherzustellen, dass der Wechsel |funktioniert), die dann als Argumente aufgeführt werden auf den äußeren grepBefehl, der wiederum nach 'Wort' sucht (Sie können dies auch hinzufügen -l, wenn Sie nur eine Liste von Dateien möchten, die übereinstimmen). Beachten Sie, dass dies nicht ganz so effizient ist wie das Schreiben von Dingen als regulären Ausdruck (es sucht öfter als unbedingt nötig), aber es ist im Allgemeinen einfacher zu erklären, als wenn es sich um eine einzelne Regex handelt.

Ich mag diese Antwort american-ninja-warrior vor 6 Jahren 0
0
Andy Lester

Erstellen Sie zunächst eine Liste mit Dateien, die diese enthalten, reporter|publisherund verwenden Sie diese Liste dann als Quelle für die Dateien, nach denen Sie suchen möchten word.

Wenn Sie ack verwenden, können Sie Folgendes tun:

ack -l 'reporter|publisher' | ack -x word 

wo der -xzweite ack-Aufruf anweist, die Liste der Dateien auf stdin als Liste der zu durchsuchenden Dateien zu verwenden.