Diese Frage hat hier bereits Antworten :

Antwort

Genau wie -L sucht nach Inhalten einer Datei ohne Übereinstimmung, -l sucht nach Inhalten einer Datei mit Übereinstimmung.

Sie müssen also das -l -Flag im zweiten „Grepping“ angeben.

Außerdem müssen Sie die Ausgabe des ersten grep als Befehlszeilenargumente an den zweiten weiterleiten. Dies kann mit xargs erfolgen, einem Tool zum Lesen von Elementen aus der Standardeingabe. Wenn Sie die Dateinamen direkt weiterleiten, sucht der zweite Grep nach der Zeichenfolge authenticate in der Datei names .

, sodass Sie am Ende landen sollten mit so etwas wie

grep -r --color -L "class public interface" * | xargs grep -l "authenticate"` 

Beachten Sie, dass xargs die Eingabe standardmäßig auf ein beliebiges Leerzeichen aufteilt, wenn Sie also Dateinamen haben Bei Leerzeichen (oder noch schlimmer) müssen Sie grep -Z und xargs -0 verwenden, damit die Dateinamen stattdessen durch NUL-Bytes getrennt werden. ( In GNU grep also. Andere können anders sein, z. B. hat FreeBSD grep stattdessen --null.)

Kommentare

  • kann Vorschläge zur Verwendung von grep -rLZ .. | xargs -0 .. hinzufügen, um Probleme aufgrund von Dateinamen

zu vermeiden

Schreibe einen Kommentar

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