Antworten:
Die -m
Option ist wahrscheinlich das, wonach Sie suchen:
grep -m 10 PATTERN [FILE]
Von 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.
Hinweis: grep hört auf, die Datei zu lesen, sobald die angegebene Anzahl von Übereinstimmungen gefunden wurde!
-m 1
und 1,579 s ohne in einer Datei mit 10 Millionen Zeilen auf meinem Laptop.
tail
ist in der Regel an die Arbeit gehen, aber bricht vor allem , wenn Sie mit Kontext sind greppen, zum Beispiel grep -A10 PATTERN
unter Verwendung von tail
Verkürzungen den Kontext, anstatt die Anzahl der Ergebnisse. Diese Antwort war das, wonach ich gesucht habe.
-m 10
ist die Option, die den Unterschied macht, wenn mehrere Dateien erfasst werden! Piping to Head zeigt keine Übereinstimmungen in nachfolgenden Dateien an, wenn die erste Datei zu viele Übereinstimmungen enthält. Vielen Dank !
Eine andere Option ist nur die Verwendung von head :
grep ...parameters... yourfile | head
Dies erfordert nicht das Durchsuchen der gesamten Datei - es wird gestoppt, wenn die ersten zehn übereinstimmenden Zeilen gefunden werden. Ein weiterer Vorteil dieses Ansatzes besteht darin, dass nicht mehr als 10 Zeilen zurückgegeben werden, selbst wenn Sie grep mit der Option -o verwenden.
Zum Beispiel, wenn die Datei die folgenden Zeilen enthält:
112233
223344
123123
Dann ist dies der Unterschied in der Ausgabe:
$ grep -o '1.' Ihre Datei | Kopf -n2 11 12 $ grep -m2 -o '1.' 11 12 12
Bei Verwendung werden head
wie gewünscht nur 2 Ergebnisse zurückgegeben, während bei -m2 3 zurückgegeben wird.
| head
Pipe nicht verwenden können , wenn Sie grep
mit -A
oder verwenden -B
(und daher nicht nur nach result ( -o
) suchen , sondern auch nach Kontext). In diesem Fall müssen Sie -m
grep die Anzahl der Zeilen mit den zurückzugebenden Ergebnissen mitteilen.
Schwanz benutzen:
#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$
Für 2 Anwendungsfälle:
grep -m 2
maximale Vorkommen pro Datei. git grep
was nicht dauert-m
Eine gute Alternative in diesen Szenarien besteht darin grep | sed 2q
, die ersten beiden Vorkommen in allen Dateien zu erfassen. sed Dokumentation: https://www.gnu.org/software/sed/manual/sed.html
less
über eine Pipe verwenden. Das wird den Bildschirm füllen und Sie können ENTERq
grep "SomeText" somefile.csv | less