Ich bin neu im Scripting und habe versucht zu lernen, wie man Text, der zwischen zwei verschiedenen Mustern existiert, extrahiert. Allerdings kann ich im folgenden Szenario noch nicht herausfinden, wie man Text zwischen zwei Mustern extrahiert:
Wenn ich meine Eingabedatei gelesen habe:
%Vor%und meine erwartete Ausgabe ist wie folgt:
%Vor%d. Mein erstes Suchmuster ist "Hallo" und überspringe dieses Muster, aber drucke alles, was in der gleichen Zeile nach diesem übereinstimmenden Muster existiert. Mein zweites Suchmuster ist "Muster" und ich möchte vollständig vermeiden, diese Zeile oder irgendwelche Zeilen darüber hinaus zu drucken .
Ich habe Folgendes versucht:
%Vor%[Ausgabe]
%Vor%Als nächstes habe ich versucht:
%Vor%[Ausgabe]
%Vor%Kann mir jemand helfen, herauszufinden, wie ich das erreichen kann? Vielen Dank im Voraus
Du hast die richtige Idee, eine Mini-Zustandsmaschine in awk
, aber du brauchst ein paar kleine Mods wie in der folgenden Abschrift:
Oder in komprimierter Form:
%Vor%Die Ausgabe davon ist:
%Vor%wie angefordert.
So funktioniert das. Die Variable echo
ist anfangs 0
, was bedeutet, dass kein Echo stattfinden wird.
Jede Zeile wird nacheinander überprüft. Wenn es patterns
enthält, ist das Echo deaktiviert.
Wenn es Hi
gefolgt von einem Leerzeichen enthält, wird echo eingeschaltet und gsub
wird verwendet, um die Zeile zu modifizieren, um alles bis auf Hi
loszuwerden.
Dann wird die Zeile (möglicherweise modifiziert) trotzdem wiederholt, wenn das Flag echo
aktiviert ist.
Nun wird es Kantenfälle wie:
gebenHi
; oder patterns
. Sie haben nicht angegeben, wie sie behandelt werden sollen, also habe ich mich nicht darum gekümmert, aber das Grundkonzept sollte das gleiche sein.