grep: bestimmte Zeile nach Übereinstimmung ausgeben

grep: bestimmte Zeile nach Übereinstimmung ausgeben

Gibt es eine Möglichkeit, mit grep die Zeile auszugeben, die eine bestimmte Anzahl von Zeilen nach der gefundenen Übereinstimmung liegt? Ich möchte beispielsweise die Zeile mit einer Übereinstimmung, die 8. Zeile nach der Übereinstimmung und die 17. Zeile nach der Übereinstimmung ausgeben. Ist das möglich?

Ich weiß, dass ich die nächsten 17 Zeilen mit ausgeben kann grep -A17, aber ich möchte wissen, ob ich die nützliche Zeile ohne alles dazwischen erhalten kann.

Antwort1

Versuchen Sie es mit einer Weiterleitung anawk blah | grep stuff -A17 | awk "NR==1{print} NR==8{print} NR==17{print;exit}" Dadurch werden nur die 1., 8. und 17. Zeile ausgegeben.

Wenn Sie sich wiederholende Muster einschließen möchten, können Sie den Operator mod (%) verwenden.

awk "(NR-1)%17 == 0{print} (NR-8)%17 == 0{print} (NR-17)%17 == 0{print}"

verwandte Informationen