Odpowiedzi:
Ta -m
opcja 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ń!
-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życie tail
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 :
grep ...parameters... yourfile | head
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:
112233
223344
123123
To jest różnica w wydajności:
$ grep -o '1.' twój plik | głowa -n2 11 12 $ grep -m2 -o '1.' 11 12 12
Użycie head
zwraca tylko 2 wyniki zgodnie z potrzebami, natomiast -m2 zwraca 3.
| head
potoku podczas używania grep
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.
Za pomocą ogona:
#dmesg
...
...
...
[132059.017752] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
[132116.566238] cfg80211: Calling CRDA to update world regulatory domain
[132116.568939] cfg80211: World regulatory domain updated:
[132116.568942] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132116.568944] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568945] cfg80211: (2457000 KHz - 2482000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568947] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
[132116.568948] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132116.568949] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
[132120.288218] cfg80211: Calling CRDA for country: GB
[132120.291143] cfg80211: Regulatory domain changed to country: GB
[132120.291146] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | head 2
head: cannot open ‘2’ for reading: No such file or directory
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -2
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -5
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$ dmesg | grep cfg8021 | tail -6
[132120.291146] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
[132120.291148] cfg80211: (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291150] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291152] cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (N/A, 2000 mBm)
[132120.291153] cfg80211: (5490000 KHz - 5710000 KHz @ 40000 KHz), (N/A, 2700 mBm)
[132120.291155] cfg80211: (57240000 KHz - 65880000 KHz @ 2160000 KHz), (N/A, 4000 mBm)
alex@ubuntu:~/bugs/navencrypt/dev-tools$
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
less
potoku. To wypełni ekran i możesz nacisnąć ENTER, aby zobaczyć więcej linii iq
wyjść:grep "SomeText" somefile.csv | less