Mit sed:
sed '$!N;/remove/!P;D' infile
Dadurch wird die Next-Linie in den Musterraum gezogen (falls nicht !in der $letzten Zeile) und geprüft, ob der Musterraum übereinstimmt remove. Wenn dies nicht der Fall ist (dh , keine der beiden Zeilen im Musterbereich enthält die Zeichenfolge remove), Pwird bis zum ersten \nEwline-Zeichen gedruckt (dh es wird die erste Zeile gedruckt). Dann wird Dbis zum ersten \nEwline-Zeichen geöffnet und der Zyklus neu gestartet. Auf diese Weise befinden sich nie mehr als zwei Linien im Musterraum.
Es ist wahrscheinlich einfacher zu verstehen , die N, P, DZyklus , wenn Sie hinzufügen , lvor und nach der Nim Musterraum aussehen:
sed 'l;$!N;l;/remove/!P;D' infile
Verwenden Sie also nur die letzten sechs Zeilen aus Ihrem Beispiel:
8AC3
remove
8AE4
8AE5
8AE6
remove
Der letzte Befehl gibt Folgendes aus:
8AC3 $
8AC3 \ n $ entfernen
entferne $
entferne \ n 8AE4 $
8AE4 $
8AE4 \ n 8AE5 $
8AE4
8AE5 $
8AE5 \ n 8AE6 $
8AE5
8AE6 $
8AE6 \ n $ entfernen
entferne $
entferne $
Hier ist eine kurze Erklärung:
cmd Ausgabe cmd
l 8AC3$ N # read in the next line
l 8AC3\n remove$ D # delete up to \n (pattern space matches so no P)
l remove$ N # read in the next line
l remove\n 8AE4$ D # delete up to \n (pattern space matches so no P)
l 8AE4$ N # read in the next line
l 8AE4\n 8AE5$ # pattern space doesn't match so print up to \n
P 8AE4 D # delete up to \n
l 8AE5$ N # read in the next line
l 8AE5\n 8AE6$ # pattern space doesn't match so print up to \n
P 8AE5 D # delete up to \n
l 8AE6$ N # read in the next line
l 8AE6\n remove$ D # delete up to \n (pattern space matches so no P)
l remove$ # last line so no N
l remove$ D # delete (pattern space matches so no P)