Ich versuche etwas zu tun wie dies aber für zitierte E-Mails, so das
%Vor%Würde das werden
%Vor%Danke
Unter der Annahme, dass jede visuelle Linie eine richtige logische Zeile ist (Zeichenkette endete mit \n
), können Sie auf die restlichen Werkzeuge verzichten und einfach uniq(1)
auf der Eingabe ausführen.
Beispiel folgt.
%Vor%Versuchen Sie Folgendes:
%Vor%Verwendete Befehle:
N
Fügt die nächste Eingabezeile in den Musterbereich ein. D
Bis zum ersten eingebetteten Newline im Musterbereich löschen.
Starten Sie den nächsten Zyklus, aber überspringen Sie das Lesen von der Eingabe, wenn es noch ist
Daten im Musterraum. Verwendete Muster:
/^>\s*$/
entspricht einer Zeile mit '& gt;' mit null oder mehr Leerzeichen gefolgt /^>\s*\n>\s*$/
stimmt mit zwei durchgehenden Zeilen überein und enthält >
mit null oder mehr Leerzeichen bei der Verwendung zusammen mit N
Also ist der obige sed
-Befehlsfluss:
awk
Dies berücksichtigt die Leerzeichen im Gegensatz zu anderen Antworten (außer perreals :))
Es fügt auch nicht einfach eine >
nach jeder Zeile mit mehr als >
ein (das heißt, wenn mehrere Zeilen mit Text vorhanden wären, würden zwischen ihnen keine Leerzeilen eingefügt).
Erklärung
%Vor% Wie diese Arbeit funktioniert, setzt man x auf & gt; wenn es eine Zeile findet, die nur & gt; und Räume.
Dann fährt fort, bis es eine Zeile findet, die nicht übereinstimmt, druckt & gt; und druckt die Linie.
Dies wird jedes Mal zurückgesetzt, wenn das Muster erneut gefunden wird.
Hoffe das hilft:)