Hallo, ich bin sehr neu in der Bash-Programmierung. Ich möchte eine Möglichkeit finden, in einem bestimmten Text zu suchen. Dafür benutze ich folgende grep
Funktion:
grep -i "my_regex"
Das funktioniert. Aber angesichts der folgenden data
:
This is the test data
This is the error data as follows
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Sobald ich das Wort gefunden habe error
(mit grep -i error data
), möchte ich die 10 Zeilen finden, die dem Wort folgen error
. Meine Ausgabe sollte also sein:
. . .
. . . .
. . . . . .
. . . . . . . . .
Error data ends
Gibt es Möglichkeiten, dies zu tun?
error
.Antworten:
Sie können die Verwendung
-B
und-A
Linien vor und nach dem Spiel zu drucken.Druckt die 10 Zeilen vor dem Spiel, einschließlich der übereinstimmenden Zeile selbst.
quelle
test=$(grep -i -B 10 'error' data)
und mit zu druckenecho $test
, erhalte ich die geraden langen Zeilen als Ausgabe.echo "$test"
lieber tun muss alsecho $test
-C 10
druckt 10 Zeilen vor UND nach auf einen Schlag aus!Dies druckt 10 Zeilen des nachfolgenden Kontexts nach dem Abgleichen der Zeilen
Wenn Sie 10 Zeilen führenden Kontexts drucken müssen, bevor Sie Zeilen abgleichen können,
Und wenn Sie 10 Zeilen führenden und nachfolgenden Ausgabekontexts drucken müssen.
Beispiel
Normal grep
Grep genau passende Linien und 2 Linien danach
Grep genau passende Linien und 2 Linien vor
Grep genau passende Linien und 2 Linien vorher und nachher
Referenz: manpage grep
quelle
Der Weg dazu befindet sich oben auf der Manpage
quelle
Versuche dies:
-A 10 bedeutet, zehn Zeilen nach dem Abgleich mit "my_regex" drucken
quelle