2015-06-26 3 views
5

Ich habe eine große Datei viele Zeilen im folgenden Format enthält,Vim entfernen Teil der Zeile in einer Datei

<SomeString1>Key1</SomeString> 
<SomeString2>Key2</SomeString> 
<SomeString3>Key3</SomeString> 
... 

ich die Tags entfernen möchten, und die Ausgabe aussehen sollte,

Key1 
Key2 
Key3 
... 

Algorithmisch sollte ich so etwas schreiben:

For all lines: 
    Remove all string before character `>` 
    Remove all string after character `</` 

Antwort

7

einfach ein verwenden ersetzen:

:%s/<[^>]*>//g 

Dies wird den s (Substitution) Befehl für jede Zeile (%) und entfernt alle <...> Sequenzen für die gesamte Linie (g) anzuwenden.

Es gibt viele Situationen, in denen diese Befehle nützlich sein, vor allem regex. Sie können weitere Informationen darüber finden here.

+0

Es funktioniert perfekt. – Sait

2

Diese beiden Befehle sollte es tun:

:%s/<\w*>// 
:%s/<\/\w*>// 

Der erste ersetzt die Öffnung Tags mit nichts. Die zweite ersetzt alle schließenden Tags durch nichts. <\w*> entspricht einer beliebigen Anzahl von alphanumerischen Zeichen zwischen < und > und <\/\w*> entspricht einer beliebigen Anzahl von alphanumerischen Zeichen zwischen </ und >.

Edit: ein einfacherer Weg:

:%s/<.\{-}>//g 

Beachten Sie, dass dies:

:%s/<.*>//g 

Werde nicht funktionieren, weil die * "gierig" und wird die ganze Zeile entspricht. \{-} ist das nicht-gierige Äquivalent. Lesen Sie mehr über greediness hier: http://vimregex.com/#Non-Greedy

Verwandte Themen