W twoim przypadku nie chcesz, aby komputer ciężko pracował .. Ale jeśli jest to tylko problem z czytelnością dla człowieka, możesz użyć lesspotoku. To wypełni ekran i możesz nacisnąć ENTER, aby zobaczyć więcej linii i qwyjść:grep "SomeText" somefile.csv | less
SilentSteel
Odpowiedzi:
240
Ta -mopcja jest prawdopodobnie tym, czego szukasz:
grep -m 10 PATTERN [FILE]
Od man grep:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines. If the input is
standard input from a regular file, and NUM matching lines are
output, grep ensures that the standard input is positioned to
just after the last matching line before exiting, regardless of
the presence of trailing context lines. This enables a calling
process to resume a search.
Uwaga: grep przestaje czytać plik po znalezieniu określonej liczby dopasowań!
Cześć, wypróbowałem to w zasadzie działa, ale nie wygląda na to, że grep „przestaje” myśleć po znalezieniu pierwszych 10 linii, wygląda na to, że kontynuuje myślenie i „używa mojego procesora” i po prostu nie drukuje, czy to jest poprawne? thansk
Jas
6
@Jason: wydaje się, że tak nie jest: grep zajmuje 0,005 s -m 1zi 1,579 s bez w pliku z 10 milionami wierszy na moim laptopie.
Grégoire
3
Piping do na tailogół zadziała, ale psuje się szczególnie, jeśli grepujesz z kontekstem, np. grep -A10 PATTERNUżycie tailobcina kontekst, a nie liczbę wyników. Ta odpowiedź była tym, czego szukałem.
dimo414
1
-m 10jest opcją, która robi różnicę podczas grepowania wielu plików! Piping to head nie pokaże dopasowań w kolejnych plikach, jeśli jest zbyt wiele dopasowań w pierwszym pliku. Dzięki !
Julien
1
IMHO to powinno być oznaczone jako zaakceptowana odpowiedź, ponieważ nie wymaga innego narzędzia. BTW, łatwiej zapamiętać tę opcję, wiedząc, że jest to skrót do --max-count
Nie będzie to wymagało przeszukiwania całego pliku - zatrzyma się po znalezieniu pierwszych dziesięciu pasujących wierszy. Kolejną zaletą tego podejścia jest to, że zwraca nie więcej niż 10 wierszy, nawet jeśli używasz grep z opcją -o.
Na przykład, jeśli plik zawiera następujące wiersze:
Zwróć uwagę, że nie możesz używać | headpotoku podczas używania grepwith -Aor -B(a więc nie tylko wyszukiwania wyniku ( -o), ale także kontekstu). W takim przypadku pozostaje -mci powiedzieć grepowi liczbę wierszy z wynikami do zwrócenia.
Attila O.
17
Używanie head w rzeczywistości nie powstrzymuje grepa przed uruchomieniem całego pliku. Użycie opcji -m w grep działa.
LopSae
7
Podejście Awk:
awk '/pattern/{print; count++; if (count==10) exit}' file
less
potoku. To wypełni ekran i możesz nacisnąć ENTER, aby zobaczyć więcej linii iq
wyjść:grep "SomeText" somefile.csv | less
Odpowiedzi:
Ta
-m
opcja jest prawdopodobnie tym, czego szukasz:Od
man grep
:Uwaga: grep przestaje czytać plik po znalezieniu określonej liczby dopasowań!
źródło
-m 1
zi 1,579 s bez w pliku z 10 milionami wierszy na moim laptopie.tail
ogół zadziała, ale psuje się szczególnie, jeśli grepujesz z kontekstem, np.grep -A10 PATTERN
Użycietail
obcina kontekst, a nie liczbę wyników. Ta odpowiedź była tym, czego szukałem.-m 10
jest opcją, która robi różnicę podczas grepowania wielu plików! Piping to head nie pokaże dopasowań w kolejnych plikach, jeśli jest zbyt wiele dopasowań w pierwszym pliku. Dzięki !Inną opcją jest po prostu użycie głowy :
Nie będzie to wymagało przeszukiwania całego pliku - zatrzyma się po znalezieniu pierwszych dziesięciu pasujących wierszy. Kolejną zaletą tego podejścia jest to, że zwraca nie więcej niż 10 wierszy, nawet jeśli używasz grep z opcją -o.
Na przykład, jeśli plik zawiera następujące wiersze:
To jest różnica w wydajności:
Użycie
head
zwraca tylko 2 wyniki zgodnie z potrzebami, natomiast -m2 zwraca 3.źródło
| head
potoku podczas używaniagrep
with-A
or-B
(a więc nie tylko wyszukiwania wyniku (-o
), ale także kontekstu). W takim przypadku pozostaje-m
ci powiedzieć grepowi liczbę wierszy z wynikami do zwrócenia.Podejście Awk:
źródło
Za pomocą ogona:
źródło
W 2 przypadkach użycia:
grep -m 2
maksymalna liczba wystąpień jest na plik.git grep
co nie bierze-m
Dobrą alternatywą w tych scenariuszach jest
grep | sed 2q
grep pierwsze 2 wystąpienia we wszystkich plikach. dokumentacja sed: https://www.gnu.org/software/sed/manual/sed.htmlźródło