Wie greife ich die nächsten N Zeilen nach dem Treffer ab und drucke sie aus?

16

Ich möchte nach einem Vorkommen in einer Textdatei suchen und dann nach jedem gefundenen Vorkommen die folgenden N Zeilen drucken. Irgendwelche Ideen?

719016
quelle

Antworten:

23

Grep bietet die folgenden Optionen, mit denen Sie dies tun können (und ähnliche Dinge). Weitere Informationen finden Sie in der Manpage :

  • -A num Gibt nach jeder Übereinstimmung num Zeilen des nachfolgenden Kontexts aus. Siehe auch die Optionen -B und -C.

  • -B num Gibt vor jeder Übereinstimmung num Zeilen des führenden Kontexts aus. Siehe auch die Optionen -A und -C.

  • -C [num] Gibt num Zeilen des führenden und nachfolgenden Kontexts aus, die jede Übereinstimmung umgeben. Der Standardwert ist 2 und entspricht -A 2 -B 2. Hinweis: Zwischen der Option und ihrem Argument darf kein Leerzeichen angegeben werden.

Colin K.
quelle
7

Wenn Sie GNU haben grep, ist dies die Option -A/ --after-context. Ansonsten können Sie es mit tun awk.

awk '/regex/ {p = N}
     p > 0   {print $0; p--}' filename
Geekosaurier
quelle
1
awk '/regex/{p=2} p > 0 {print $0; p--}' filename- funktioniert, deins nicht.
BladeMight
4

Verwenden Sie das -AArgument, grepum anzugeben, wie viele Zeilen über die Übereinstimmung hinaus ausgegeben werden sollen.

Ignacio Vazquez-Abrams
quelle
3

Drucken Sie N Zeilen nach übereinstimmenden Zeilen

grepMit der -A nOption können Sie N Zeilen nach dem Abgleichen von Zeilen drucken.

Beispielsweise:

$ cat mytext.txt 
  Line1
  Line2
  Line3
  Line4
  Line5
  Line6
  Line7
  Line8
  Line9
  Line10

$ grep -wns Line5 mytext.txt -A 2
5:Line5
6-Line6
7-Line7

Andere verwandte Optionen:

Drucken Sie N Zeilen, bevor Sie die Zeilen abgleichen

Mit der -B nOption können Sie N Zeilen drucken, bevor Sie Zeilen abgleichen.

$ grep -wns Line5 mytext.txt -B 2
3-Line3
4-Line4
5:Line5

Drucken Sie N Zeilen vor und nach dem Abgleichen der Zeilen

Mit der -C nOption können Sie N Zeilen vor und nach dem Abgleichen von Zeilen drucken.

$ grep -wns Line5 mytext.txt -C 2
3-Line3
4-Line4
5:Line5
6-Line6
7-Line7
user1336087
quelle