bash - zwischen - Kann ich nur die ersten n Zeilen einer Datei grepen?




sed zeile ersetzen (8)

Ich habe sehr lange Log-Dateien, ist es möglich, Grep nur die ersten 10 Zeilen zu suchen?


Die Ausgabe der head -10 file kann an grep werden, um dies zu erreichen:

head -10 file | grep …

Perl verwenden:

perl -ne 'last if $. > 10; print if /pattern/' file

Die Magie der Pfeifen;

head -10 log.txt | grep <whatever>

Für Leute, die das bei Google finden, musste ich die ersten n Zeilen mehrerer Dateien durchsuchen, aber nur die passenden Dateinamen drucken. ich benutzte

 gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames

Die Datei FNR..nextfile die Verarbeitung einer Datei, sobald 10 Zeilen FNR..nextfile wurden. Der //..{} den Dateinamen aus und bewegt sich weiter, wenn die erste Übereinstimmung in einer bestimmten Datei angezeigt wird. Um die Dateinamen für andere Programme zu zitieren, verwenden Sie

 gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames

Ich hatte ein ähnliches Problem und alle oben genannten Probleme lösen es nicht vollständig. Ich bin auch daran interessiert, den Dateinamen mit den passenden Zeilen zu erhalten. Meine Lösung:

ls |parallel --gnu 'cat <(echo {}) <(head {})|grep -B1 -m1 -P "^>.*F3$"'

NB: Das Muster stimmt in meinem Fall immer mit der ersten Zeile überein.


Oder verwende awk für einen einzelnen Prozess ohne | :

awk '/your_regexp/ && NR < 11' INPUTFILE

Wenn in jeder Zeile your_regexp übereinstimmt und die Anzahl der Datensätze (Zeilen) kleiner als 11 ist, wird die Standardaktion ausgeführt (die die Eingabezeile druckt).

Oder benutze sed :

sed -n '/your_regexp/p;10q' INPUTFILE 

Überprüft Ihre Regexp und druckt die Zeile aus ( -n bedeutet, dass die Eingabe nicht gedruckt wird, die ansonsten die Standardeinstellung ist) und gleich nach der zehnten Zeile beendet wird.


Sie haben ein paar Optionen mit Programmen zusammen mit grep . Die einfachste ist meiner Meinung nach, head zu benutzen:

head -n10 filename | grep ...

head gibt die ersten 10 Zeilen aus (mit der Option -n ), und dann können Sie diese Ausgabe nach grep .


grep -A 10 <Muster>

Dies ist, um das Muster und die nächsten 10 Zeilen nach dem Muster zu greifen. Dies funktioniert nur gut für ein bekanntes Muster, wenn Sie kein bekanntes Muster verwenden, verwenden Sie die "Kopf" Vorschläge.


grep "pattern" <(head -n 10 filename)




grep