Ik zou graag de bestanden recursief en uniek willen vermelden die het gegeven woord bevatten.

Voorbeeld : Controleren op woord “check”, normaal is een grep

$ grep check * -R 

Maar aangezien dit woord veel voorkomt, krijg ik veel output. Dus ik moet alleen de bestandsnamen vermelden die het opgegeven zoekwoord bevatten. Ik denk dat een truc met find en xargs hier zou volstaan, maar ik weet het niet zeker.

Enig idee?

Antwoord

Gebruik de -l of --files-with-matches optie die als volgt wordt gedocumenteerd:

Normale uitvoer onderdrukken; print in plaats daarvan de naam van elk invoerbestand waaruit de uitvoer normaal gesproken zou zijn afgedrukt. Het scannen stopt bij de eerste wedstrijd. (-l wordt gespecificeerd door POSIX.)

Dus voor u kunt u bijvoorbeeld het volgende gebruiken:

$ grep check * -lR 

Reacties

  • Werkt ook op MSYS. Geweldig!
  • Ik gebruikte grep -rl "text to find" "/usr/share" en het werkte prima!

Antwoord

find . -type f -exec grep -l check {} + 

U wilt waarschijnlijk “niet de optie -R gebruiken die met moderne versies van GNU grep volgt symlinks bij aflopende mappen. Gebruik in plaats daarvan de optie -r die sinds versie 2.12 (april 2012) niet langer symlinks volgt.

Als uw grep niet de GNU-versie is, of ouder is dan versie 2.12, of als u uw code wilt overdragen naar niet-bloeding-edge-GNU-systemen, gebruik dan de find commando hierboven.

Anders kunt u het volgende doen:

grep -rl check . 

Gebruik geen * (aangezien dat verborgen bestanden in de huidige directory zou weglaten (en alleen in de huidige directory) en problemen zou veroorzaken voor bestanden waarvan de naam begint met een -), vermijd het doorgeven opties na argumenten als dat is geen garantie teed om te werken afhankelijk van de omgeving en is niet draagbaar.

Antwoord

Probeer dit:

find . -type f | xargs grep -c check $1 | grep -v ":0" 

Wat betreft de grep vlaggen …

-c zal retourneer een bestandsnaam gevolgd door: en een getal dat aangeeft hoe vaak de zoekreeks in het opgegeven bestand voorkomt.

-v neemt de uitvoer van de eerste grep zoek, filter de bestanden met nul resultaten uit, en print alleen de bestanden met niet-nul resultaten.

Opmerkingen

  • Dit zal een vals negatief resultaat opleveren als je bestand (en) (of director (ën)) hebt waarvan de naam :0 bevat. Het ' is beter grep -v ':0$' te doen. Zelfs dat zal verstikken in padnamen die nieuwe regel (s) bevatten.

Antwoord

grep -lR "text-to-find" <where-to-find> werkt ook prima.

bijv. grep -lR "NAVIGATE" . waar we het woord NAVIGATE vinden in de . in de huidige directory.

Answer

grep -rin “whatToFind” locationToFInd

eg $ grep -rin “vihaan”.

zal recursief bestandsnamen zoeken en weergeven en de corresponderende regels die “vihaan” in zich hebben, “.” verwijst naar de huidige directory.

Answer

find . -type f | grep "keyword" * 

zoek in huidige directory. Om vanuit root op te zoeken, specificeert u / in plaats van .

Answer

 grep -rli trim \` find . -name *.q \` 

Geef je de lijst met .q bestanden bevat het trefwoord trim

Geef een reactie

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