Przeszukuję katalog rekurencyjnie za pomocą grep z następującymi argumentami, mając nadzieję, że zwrócę tylko pierwsze dopasowanie. Niestety zwraca więcej niż jeden - w rzeczywistości dwa, kiedy ostatnio patrzyłem. Wygląda na to, że mam zbyt wiele argumentów, zwłaszcza bez uzyskania pożądanego rezultatu. : - /
# grep -o -a -m 1 -h -r "Pulsanti Operietur" /path/to/directory
zwroty:
Pulsanti Operietur
Pulsanti Operietur
Może grep nie jest najlepszym sposobem na zrobienie tego? Bardzo mi dziękujesz.
-r
oczywiście), ale nie powinny boleć (nie-a
grep -m 1
z tego powodu zwrócił oba wystąpienia.|head -1
rozwiązałem to!first not first from result
. Ta odpowiedź drukuje pierwsze dopasowanie w dowolnym pliku i zatrzymuje się. Czego jeszcze się spodziewałeś?Możesz przesyłać
grep
wyniki dohead
w połączeniu ze stdbuf .Zauważ, że aby zapewnić zatrzymanie po N-tym dopasowaniu, musisz
stdbuf
upewnić się,grep
że nie buforujesz jego wyniku:Gdy tylko
head
zużyje 1 linię, zostanie zakończona igrep
otrzyma,SIGPIPE
ponieważ nadal wysyła coś do potoku, gdyhead
go nie ma.Zakłada się, że żadna nazwa pliku nie zawiera znaku nowej linii.
źródło
xargs
:find . -name '*.gz' | xargs -I '{}' stdbuf -oL zgrep -al 'pattern' {} | head -n 1
. To jednak nie kończy się przy pierwszym meczu. Jakakolwiek rada?grep
jest--line-buffered
opcja zapobiegają bufor napowietrznych bez wywoływania dodatkowego narzędzia?Mój program podobny do grep-a
ack
ma-1
opcję, która zatrzymuje się przy pierwszym dopasowaniu znalezionym gdziekolwiek. Obsługuje również-m 1
to, do którego odnosi się @mvp. Umieściłem go tam, ponieważ jeśli szukam dużego drzewa kodu źródłowego, aby znaleźć coś, co wiem, że istnieje tylko w jednym pliku, nie trzeba go szukać i trzeba nacisnąć Ctrl-C.źródło
ag
może to być szybkie, ale nie ma-1
opcji przydatnej w tym przypadkuMożesz użyć poniższego polecenia, jeśli chcesz wydrukować całą linię i nazwę pliku, jeśli wystąpienie określonego słowa w bieżącym katalogu, którego szukasz.
źródło
Pojedyncza wkładka, wykorzystująca
find
:źródło
grep -r
działa o wiele szybciej - to tylko jedna kopia, która wykonuje przechodzenie przez katalog.