In Ihrem Fall möchten Sie nicht, dass der Computer hart arbeitet. Wenn es sich jedoch nur um ein Problem der menschlichen Lesbarkeit handelt, können Sie ihn lessüber eine Pipe verwenden. Das wird den Bildschirm füllen und Sie können ENTER qgrep "SomeText" somefile.csv | less
drücken
Antworten:
240
Die -mOption 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!
Hallo, es hat versucht, es funktioniert im Grunde, aber es scheint nicht so, als ob der Grep "aufhört" zu denken, nachdem er die ersten 10 Zeilen gefunden hat. Es sieht so aus, als würde er weiter denken und "meine CPU verwenden" und nur nicht drucken. Ist es richtig? thansk
Jas
6
@ Jason: Dies scheint nicht der Fall zu sein: grep benötigt 0,005 s mit -m 1und 1,579 s ohne in einer Datei mit 10 Millionen Zeilen auf meinem Laptop.
Grégoire
3
Rohrleitungen in tailist in der Regel an die Arbeit gehen, aber bricht vor allem , wenn Sie mit Kontext sind greppen, zum Beispiel grep -A10 PATTERNunter Verwendung von tailVerkürzungen den Kontext, anstatt die Anzahl der Ergebnisse. Diese Antwort war das, wonach ich gesucht habe.
dimo414
1
-m 10ist 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 !
Julien
1
IMHO sollte dies als akzeptierte Antwort markiert werden, da kein anderes Tool erforderlich ist. Übrigens ist es einfacher, sich an diese Option zu erinnern, wenn man weiß, dass es sich um die Abkürzung von --max-count
ishahak vom
68
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:
Beachten Sie, dass Sie die | headPipe nicht verwenden können , wenn Sie grepmit -Aoder verwenden -B(und daher nicht nur nach result ( -o) suchen , sondern auch nach Kontext). In diesem Fall müssen Sie -mgrep die Anzahl der Zeilen mit den zurückzugebenden Ergebnissen mitteilen.
Attila O.
17
Die Verwendung von head verhindert nicht, dass grep die gesamte Datei durchläuft. Die Verwendung der Option -m in grep funktioniert.
LopSae
7
Awk Ansatz:
awk '/pattern/{print; count++; if (count==10) exit}' file
Sie können die "Code-Formatierung" einstellen, indem Sie im Editor auf das Symbol "{}" klicken.
Peterh - Wiedereinsetzung Monica
Es wäre nützlich, besser lesbare Beispiele zu liefern als loooonl loooog liiines
Putnik
0
Für 2 Anwendungsfälle:
Ich möchte nur n Gesamtergebnisse, nicht n Ergebnisse pro Datei, sondern das grep -m 2maximale Vorkommen pro Datei.
Ich benutze oft git grepwas 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
Antworten:
Die
-m
Option ist wahrscheinlich das, wonach Sie suchen:Von
man grep
:Hinweis: grep hört auf, die Datei zu lesen, sobald die angegebene Anzahl von Übereinstimmungen gefunden wurde!
quelle
-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 Beispielgrep -A10 PATTERN
unter Verwendung vontail
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 :
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:
Dann ist dies der Unterschied in der Ausgabe:
Bei Verwendung werden
head
wie gewünscht nur 2 Ergebnisse zurückgegeben, während bei -m2 3 zurückgegeben wird.quelle
| head
Pipe nicht verwenden können , wenn Siegrep
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.Awk Ansatz:
quelle
Schwanz benutzen:
quelle
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.htmlquelle