Antwoord
Net zoals -L
zoekt naar de inhoud van een bestand zonder overeenkomst, -l
zoekt naar de inhoud van een bestand met een overeenkomst.
U moet dus de -l
vlag specificeren in de tweede “grepping”.
Bovendien moet u de uitvoer van de eerste grep
naar de tweede sturen als opdrachtregelargumenten. Dit kan gedaan worden met xargs
, wat een tool is om items uit de standaardinvoer te lezen. Door de bestandsnamen rechtstreeks te pipen zou de tweede grep op zoek gaan naar de string authenticate
in het bestand namen .
dus je zou moeten eindigen met zoiets als
grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`
Merk op dat xargs
standaard de invoer splitst in elke witruimte, dus als je bestandsnamen hebt met spaties (of erger), “zult u grep -Z
en xargs -0
moeten gebruiken om de bestandsnamen in plaats daarvan te laten scheiden door NUL bytes. ( Dat wil zeggen in GNU grep. Anderen kunnen anders zijn, bijv. FreeBSD grep heeft in plaats daarvan --null
.)
grep -rLZ .. | xargs -0 ..
te gebruiken om problemen met bestandsnamen te voorkomen