Svar
Precis som -L
söker efter innehåll i en fil utan matchning, -l
söker efter innehållet i en fil med en matchning.
Så du måste ange -l
-flaggan i den andra ”grepping”.
Dessutom måste du rikta utdata från den första grep
till den andra som kommandoradsargument. Detta kan göras med xargs
, som är ett verktyg för att läsa objekt från standardingången. Att pipa filnamnen direkt skulle få andra grep att leta efter strängen authenticate
i filen namn .
så att du bör hamna med något som
grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`
Observera att xargs
som standard delar in ingången i valfritt utrymme, så om du har filnamn med mellanslag (eller värre) måste du använda grep -Z
och xargs -0
för att filnamnen ska separeras av NUL-byte istället. ( I GNU grep, det vill säga. Andra kan vara olika, t.ex. FreeBSD grep har --null
istället.)
Kommentarer
- kan lägga till förslag om att använda
grep -rLZ .. | xargs -0 ..
för att undvika problem på grund av filnamn