Svar
Ligesom -L
søger efter indhold i en fil uden match, -l
søger efter indholdet af en fil med et match.
Så du bliver nødt til at angive -l
flag i den anden “grepping”.
Derudover skal du dirigere output fra den første grep
til den anden som kommandolinjeargumenter. Dette kan gøres ved hjælp af xargs
, som er et værktøj til at læse emner fra standardindgangen. Piping af filnavne direkte ville få den anden grep til at se efter strengen authenticate
i filen navne .
så du skulle ende med noget som
grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`
Bemærk, at xargs
som standard opdeler input på ethvert hvidt område, så hvis du har filnavne med mellemrum (eller værre) skal du bruge grep -Z
og xargs -0
for at få filnavne adskilt af NUL-byte i stedet. ( I GNU grep er det. Andre kan være forskellige, f.eks. Har FreeBSD grep --null
i stedet.)
Kommentarer
- kan tilføje forslag om at bruge
grep -rLZ .. | xargs -0 ..
for at undgå problemer på grund af filnavne