Deze vraag heeft hier al antwoorden :

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.)

Reacties

  • kan een suggestie toevoegen om grep -rLZ .. | xargs -0 .. te gebruiken om problemen met bestandsnamen te voorkomen

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *