Das Ereignis, das Sie möchten, ist nicht das zweite Ereignis. es ist der dritte . Um das dritte Vorkommen -c
mit drei Kontextzeilen zu erhalten:
$ man sh | awk '/-c/ f' -c Read commands from the command_string operand instead of from the standard input. Special param‐ eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.) set from the remaining argument operands.
Wie es funktioniert
awk liest die Eingabe implizit Zeile für Zeile. Dieses Skript verwendet zwei Variablen. n
verfolgt, wie oft wir gesehen haben -c
. f
verfolgt, wie viele Zeilen wir drucken sollen.
/-c/
Wenn wir eine Zeile erreichen
-c
, in der sich der Zähler befindet, erhöhen Sie die Zählungn
um eins. Wennn
drei, dannf
auf drei setzen.f
Wenn
f
ungleich Null ist, drucken Sie die Zeile und dekrementierenf
.
Alternative Lösung
$ man sh | grep -A3 -m3 -- -c | tail -n4 -c Read commands from the command_string operand instead of from the standard input. Special param‐ eter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.) set from the remaining argument operands.
Die -m3
Option weist grep an, nur die ersten drei Spiele zurückzugeben. tail -n4
gibt die letzten vier Zeilen aus diesen Übereinstimmungen zurück. Wenn sich die zweite und dritte Übereinstimmung -c
jedoch innerhalb der Anzahl der Zeilen im Kontext befanden, entspricht diese Ausgabe möglicherweise nicht Ihren Wünschen.