grep einen block von text getrennt durch zwei wesentliche Linien
Ich habe eine text-Datei, die text enthält, der die Blöcke in etwa wie folgt formatiert:
Beginning of block
...
...
...
.........some_pattern.......
...
...
End of block
Beginning of block
...
... etc.
Des blocks kann eine beliebige Anzahl von Zeilen, sondern beginnen Sie immer mit den zwei Trennzeichen. Was ich tun möchte ist Spiel "some_pattern" und drucken den ganzen block auf stdout. Mit dem Beispiel oben, würde ich diese nur:
Beginning of block
...
...
...
.........some_pattern.......
...
...
End of block
Habe ich versucht, mit etwas wie dieses, aber ohne Erfolg:
grep "Beginning of block\n.*some_pattern.*\n.*End of block"
Keine Idee, wie das mit grep? (oder vielleicht mit einem anderen tool)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgendes könnte für Sie arbeiten:
Ich denke
awk
besser ist für diese:Erklärung
Er druckt nur, wenn der
p
flag "aktiv" undsome_pattern
abgestimmt ist:Beginning of block
, dann macht variablep=1
und startet die Speicherung der Zeilen im arraya[]
.some_pattern
, setzt es den flagf
1, so dass wir wissen, dass das Muster gefunden wurde.End of block
es zurückp=0
. Wennsome_pattern
gefunden worden, die seit der letztenBeginning of block
alle Zeilen, die gespeichert wurden, gedruckt werden. Schließlich wird ein[] gelöscht, und f wird zurückgesetzt, wir werden einen Neuanfang, wenn wir uns wieder begegnenBeginning of block
.Anderen test
Hier ist ein Weg, mit
awk
:Ergebnisse:
sed ist effizient für eine solche Behandlung
mit grep, Sie sollte sicherlich pass durch Vermittler Datei oder ein array.