Grep verwenden; Wie zeige ich das N-te Vorkommen eines Musters?

5258
tjt263

Mit grep; Wie zeige ich das n- te Vorkommen eines Musters?

Zum Beispiel; man sh |grep -A3 -- '-c'wird mehrere Spiele zurückgeben.

Ich könnte will das isolieren 3 rd Auftreten nur, so dass es zeigt:

-- -c Read commands from the command_string operand instead of from the standard input. Special parameter 0 will be set from the command_name operand and the positional parameters ($1, $2, etc.) set from the remaining argument operands. -- 

1

1 Antwort auf die Frage

2
John1024

Das Ereignis, das Sie möchten, ist nicht das zweite Ereignis. es ist der dritte . Um das dritte Vorkommen -cmit 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. nverfolgt, wie oft wir gesehen haben -c. fverfolgt, 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ählung num eins. Wenn ndrei, dann fauf drei setzen.

  • f

    Wenn fungleich Null ist, drucken Sie die Zeile und dekrementieren f.

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 -m3Option weist grep an, nur die ersten drei Spiele zurückzugeben. tail -n4gibt die letzten vier Zeilen aus diesen Übereinstimmungen zurück. Wenn sich die zweite und dritte Übereinstimmung -cjedoch innerhalb der Anzahl der Zeilen im Kontext befanden, entspricht diese Ausgabe möglicherweise nicht Ihren Wünschen.