wypisuje nazwę pliku przed każdą pasującą linią (dodajemy /dev/nullw przypadku, gdy istnieje tylko jeden pasujący plik, ponieważ grepnie wypisuje nazwy pliku, jeśli zostanie przekazany tylko jeden plik do sprawdzenia. Implementacja GNU grepma taką -Hopcję jako alternatywa).
find .-name '*.py'-exec grep -l something {}+
wypisuje tylko nazwy plików, które mają co najmniej jedną pasującą linię.
Aby wydrukować nazwę pliku przed pasującymi liniami, możesz zamiast tego użyć awk:
Lub zadzwoń grepdwukrotnie dla każdego pliku - choć byłoby to mniej wydajne, ponieważ uruchomiłoby co najmniej jedno greppolecenie i maksymalnie dwa dla każdego pliku (i przeczytałby zawartość pliku dwa razy):
W zależności od wersji GNU grep, grepmoże lub nie może zajrzeć do wnętrza dowiązania lub dowiązania Ruch do katalogów. Możesz również znaleźć pewne różnice w obsłudze innych typów plików nieregularnych.
Stéphane Chazelas
5
Możesz powiedzieć grepowi, aby uwzględnił nazwę pliku na wyjściu. Jeśli więc istnieje dopasowanie, zostanie wyświetlone na konsoli; jeśli w pliku nie ma zgodności, dla tego pliku nie zostanie wydrukowana żadna linia.
find . -name "*.py" | xargs grep -n -H something
Z man grep:
-H Always print filename headers with output lines
-n, --line-number
Each output line is preceded by its relative line number in the file, starting at line 1. The line number counter is reset for each file processed.
This option is ignored if -c, -L, -l, or -q is specified.
Jeśli twoje pliki mogą mieć nazwy ze spacjami, musisz przełączyć potok, aby używać znaków NUL jako separatora. Pełna komenda będzie teraz wyglądać następująco:
Istnieją grepalternatywy, które domyślnie wyświetlają wyniki w żądanym formacie. Dwa najbardziej popularne, które znam to ag(znany również jako „srebrny poszukiwacz”) i ack. agjest reklamowany jako szybsza alternatywa dla ack.
Nie mogę cię tutaj pokazać, ale wydruk jest starannie kolorowy. Dostaję nazwy plików w kolorze oliwkowo-zielonym, numery linii w kolorze złotożółtym, a dopasowany kawałek w każdej linii w kolorze krwistoczerwonym. Kolory można jednak dostosowywać.
Odpowiedzi:
wypisze nazwę pliku po pasujących wierszach.
wypisuje nazwę pliku przed każdą pasującą linią (dodajemy
/dev/null
w przypadku, gdy istnieje tylko jeden pasujący plik, ponieważgrep
nie wypisuje nazwy pliku, jeśli zostanie przekazany tylko jeden plik do sprawdzenia. Implementacja GNUgrep
ma taką-H
opcję jako alternatywa).wypisuje tylko nazwy plików, które mają co najmniej jedną pasującą linię.
Aby wydrukować nazwę pliku przed pasującymi liniami, możesz zamiast tego użyć awk:
Lub zadzwoń
grep
dwukrotnie dla każdego pliku - choć byłoby to mniej wydajne, ponieważ uruchomiłoby co najmniej jednogrep
polecenie i maksymalnie dwa dla każdego pliku (i przeczytałby zawartość pliku dwa razy):W każdym razie nie chcesz zapętlać wyników
find
takich działań i pamiętaj, aby cytować swoje zmienne .Jeśli chcesz użyć pętli powłoki z narzędziami GNU:
(działa również na FreeBSD i pochodnych).
źródło
Jeśli używasz GNU grep, możesz użyć jego
-r
lub--recursive
opcji, aby wykonać to proste wyszukiwanie:Potrzebujesz tylko
find
wtedy, gdy potrzebujesz bardziej zaawansowanych predykatów.źródło
grep
,grep
może lub nie może zajrzeć do wnętrza dowiązania lub dowiązania Ruch do katalogów. Możesz również znaleźć pewne różnice w obsłudze innych typów plików nieregularnych.Możesz powiedzieć grepowi, aby uwzględnił nazwę pliku na wyjściu. Jeśli więc istnieje dopasowanie, zostanie wyświetlone na konsoli; jeśli w pliku nie ma zgodności, dla tego pliku nie zostanie wydrukowana żadna linia.
Z
man grep
:Jeśli twoje pliki mogą mieć nazwy ze spacjami, musisz przełączyć potok, aby używać znaków NUL jako separatora. Pełna komenda będzie teraz wyglądać następująco:
źródło
Możesz spróbować czegoś takiego:
To polecenie exec grep dla każdego pliku odkrytego przez polecenie find i jego standardowa funkcja polecenia find
źródło
Użyj
-l
argumentu.Bardziej wyszukanym zastosowaniem byłoby:
źródło
Istnieją
grep
alternatywy, które domyślnie wyświetlają wyniki w żądanym formacie. Dwa najbardziej popularne, które znam toag
(znany również jako „srebrny poszukiwacz”) iack
.ag
jest reklamowany jako szybsza alternatywa dlaack
.Nie mogę cię tutaj pokazać, ale wydruk jest starannie kolorowy. Dostaję nazwy plików w kolorze oliwkowo-zielonym, numery linii w kolorze złotożółtym, a dopasowany kawałek w każdej linii w kolorze krwistoczerwonym. Kolory można jednak dostosowywać.
źródło