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