In vim könntest du das mit
machen %Vor% Normalerweise: join fügt vor dem Verbinden am Ende jeder Zeile ein Leerzeichen ein, aber das !
unterdrückt das.
Im Allgemeinen würde ich empfehlen, eine geeignete XML-Parsing-Bibliothek in einer Sprache wie Python, Ruby oder Perl zu verwenden, um XML-Dateien zu manipulieren (ich empfehle Python + ElementTree), aber in diesem Fall ist es einfach genug, eine Regex zu verwenden Lösung.
In Vim:
qq
: Aufnahme Makro starten gJgJ
: verbindet die nächsten beiden Zeilen ohne Leerzeichen j
: gehe nach unten q
: Aufzeichnung stoppen N@q
: N = Anzahl der Zeilen (tatsächlich etwa 1/3 aller Zeilen, wenn sie unterwegs kondensiert werden) Sie können ein Makro aufzeichnen. Grundsätzlich würde ich mit meinem Cursor am Anfang der ersten Zeile beginnen. Drücken Sie 'qa' (Makros werden in ein Register aufgenommen). Drücken Sie shift-V, um zeilenweise visueller Modus zu sein. Suchen Sie dann nach dem End-Tag '// abc'. Drücken Sie dann Shift-J, um die Linien zu verbinden. Dann müssten Sie den Cursor zum nächsten Tag bewegen, wahrscheinlich mit 'j ^' und drücken Sie 'q', um die Aufnahme zu stoppen. Sie können die Aufzeichnung dann mit '@a' erneut ausführen oder 10000 @ a angeben, wenn Sie möchten. Wenn die Tags unterschiedlich oder nicht direkt hintereinander sind, müssen Sie nur ändern, wie Sie die öffnenden und schließenden Tags für Suchen oder ähnliches finden.
Dies sollte im Ex-Modus funktionieren:
:%s/\(^<abc.*>\)^M^\(.*\)^M^\(^<\/abc>\).*^M/^M/g
Ich sollte zusätzliche Leerzeichen (oder einen Tabulator zwischen den Werten) haben, aber Sie könnten es entfernen, je nachdem, was es ist (\ t oder \ \ \ \).
Was Sie suchen / ersetzen, ist hier (pattern1) [enter] (pattern2) [enter] (pattern3) [enter] und ersetzen Sie ihn durch (pattern1) (pattern2) (pattern3) [enter]
Das ^ M ist mit Strg + v STRG + m
erledigt