bestimmte Zeile drucken und dann noch einige mehr

bestimmte Zeile drucken und dann noch einige mehr

Ich versuche, eine Datei nach einem Muster zu durchsuchen, und wenn es gefunden wird, möchte ich die Zeile und 10 weitere Zeilen des Ergebnisses sehen.

bisher habe ich

grep -n pattern file | cut -d: f1 

jetzt bin ich nicht sicher, wie ich diese Ausgabe verwenden soll, um den Ausdruck mit der Logik wie dieser durchzuführen

sed -n result,(result+10)p file

wahrscheinlich wird es einige Probleme geben, wenn das Muster mehrere Zeilen umfasst.

Jede Hilfe ist willkommen

Antwort1

Wenn grep -Aes nicht funktioniert, versuchen Sie

awk '/pattern/ {for(i=0;i<number_of_lines;i++){print;getline}}' <filename>

sonst hat sed eine andere schmutzige Lösung

sed -n '/pattern/ {p;n;p;n;p;...}' <filename>hier p-> drucken, n -> zur nächsten Zeile wechseln. Die Anzahl von p ist also die Anzahl der zu druckenden Zeilen

Aktualisieren:

Um es als Funktion zu verwenden, schreiben Sie es in eine test.sh

jobcheck(){
  awk "/$1/"' {for(i=0;i<10;i++){print;getline}}' $2
}

dann einfach

source test.sh

laufen,

jobcheck "pattern" "file"

Update: Gemäß Jonathan Lefflers Vorschlag sollte, wenn eine der nächsten 10 Zeilen das Muster enthält, mit der Zählung ab dieser Zeile begonnen werden, damit

pattern  ->start printing from here to next 10 lines
blah
blah
pattern  ->forget about the last 2 lines, start counting from here
blah 
blah

Der aktualisierte Awk-Befehl sieht also so aus:

awk '/pattern/{max_line=NR+2} {if(NR<=max_line) print}' <filename>

Ebenso wird auch Inside Jobcheck geändert. Prost:)

Antwort2

Verwenden von grep 2.10:

grep -A 10 "pattern" your_file

druckt 10 Zeilen nach dem Match

Von demgrep-manpage:

-Eine Zahl

--after-context=Nummer

Drucken Sie die Anzahl Zeilen des nachfolgenden Kontexts nach den übereinstimmenden Zeilen.

Verwendung von GNU awk 3.1.8:

awk '{if(a-->0) {print; next}} /pattern/{print; a=10}' your_file

Antwort3

Ich würde verwenden:

sed -n '/pattern/{N;N;N;N;N;N;N;N;N;N;p;}'

oder

sed '1,/pattern/{/pattern/!d;}' | sed '12,$d'

verwandte Informationen