Sortieren Sie nach durch Kommas getrennten Wörtern

11

Normaler Befehl: Sortieren kann Zeilen nach Spalte oder virtueller Spalte ( \%coder \%v) sortieren. Kann die übergeordnete logische Spalte als Sortierschlüssel verwendet werden? Die Verwendung von regulären Ausdrücken sieht für dieses Szenario etwas komplex aus (die Spalte befindet sich am Ende der Zeile?) Und sieht ähnlich aus wie das Sortierdienstprogramm ( sork -k), aber das Sortieren mit dieser Funktionalität ist unter Windows nicht verfügbar. Das Vim-Plug-In hilft ebenfalls.

Zum Beispiel möchte ich die 2 Zeilen unten nach der letzten durch Komma getrennten Spalte sortieren. Mein reales Szenario hat viel mehr Spalten und Zeichenfolgenmuster. Das Angeben eines Spaltenbegrenzers vereinfacht dies erheblich.

xxx,yyy,zzz,0x123
zzxz,xxxx,yyyy,0x121
Thomson
quelle

Antworten:

11

Mit der Sortierung von Vim können Sie entweder überspringen {pattern}oder nur (mit der rFlagge) berücksichtigen . Ein regulärer Ausdruck für die letzte durch Kommas getrennte Spalte ist einfach zu formulieren: Überspringen Sie alles bis einschließlich des letzten Kommas in einer Zeile:

:sort/.*,/

Für jede andere Spalte würde ich das rFlag verwenden und N (hier :) 2vorherige Spalten überspringen über \zs:

:sort/\([^,]*,\)\{2}\zs[^,]*/
Ingo Karkat
quelle
1
Da die letzte Spalte zufällig eine Hex-Zahl ist, kann die Verwendung des xFlags ebenfalls hilfreich sein.
Jecxjo
Das sieht gut aus. Die letzte Spalte kann ein Sonderfall sein. Irgendeine einfache Darstellung für die mittleren Spalten?
Thomson
Ich dachte, Sie könnten sich etwas dafür einfallen lassen, aber hier sind Sie. Bitte akzeptieren Sie meine (bearbeitete) Antwort, indem Sie auf das nebenstehende Häkchen klicken. Vielen Dank!
Ingo Karkat