Vraag Hoe "grep" alleen uit te voeren in de map waarin u zich bevindt


Dus zeg dat ik in / home / folder1 ben, die veel .txt-bestanden bevat. Als ik wil gebruiken grep -r "xxx" ___, hoe zou ik het ___ betekenen dat ik alleen wil dat de grep opdracht geeft om in de map te kijken waarin ik zit?


1
2018-02-21 18:29


oorsprong




antwoorden:


Verwijder de -r (recursieve) vlag, en in plaats daarvan een shell-glob gebruiken voor de bestanden die u wilt zoeken:

grep 'xxx' *.txt

3
2018-02-21 18:32



Om te verduidelijken, controleer ik eigenlijk of de "xxx" in een van de bestanden zit. Zou deze opdracht nog steeds werken EDIT: ik heb gecontroleerd, niet alle bestanden zijn .txt, moet ik gewoon doen * - DrBracewell
@DrBracewell Gebruik een glob die alle bestanden bevat die u wilt doorzoeken. Gebruik bijvoorbeeld om alle .txt- en .ini-bestanden te doorzoeken grep 'xxx' *.txt *.ini. Lees dit en de gerelateerde links voor meer informatie over globping: Wat is bestandsbolling? - wjandrea


Hoe zit het met het gebruik ./? Dit betekent expliciet "deze map".

grep 'xxx' ./*

Hiermee worden alle bestanden in de map gescand actueel map voor alle exemplaren van xxx in elk bestand.

En natuurlijk als je alle bestanden in de sub-directories van de huidige map die moet worden gescand, gebruik dan:

grep -r 'xxx' ./*

En in feite als u zich al in de directory van uw keuze bevindt (gebruik ls en pwd -P om zeker te zijn), dan is het echt overbodig om te gebruiken ./. Dus dit zou ook op dezelfde manier moeten werken en dezelfde output moeten geven:

grep -r 'xxx' *

0
2018-02-22 11:48



Vermeld de huidige map expliciet (./) zou in dit geval geen verschil mogen maken. - Melebius
@benett Melebius betekent dat er feitelijk geen verschil is tussen * en ./*. - wjandrea