根据逗号分隔的单词排序


11

普通命令:sort可以根据列或虚拟列(\%c\%v)对行进行排序,可以将更高级别的逻辑列用作排序键吗?在这种情况下,使用正则表达式看起来有点复杂(该列在行尾吗?),它看起来与sort实用程序(sork -k)相似,但是在Windows上无法使用此功能进行排序。Vim插件也将提供帮助。

例如,我想根据最后一列(用逗号分隔)对下面的2行进行排序。我的实际情况有更多的列和字符串模式。指定列定界符将大大简化它。

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

Answers:


11

Vim的排序使您可以跳过{pattern}或仅考虑它(带有r标志)。最后一个逗号分隔列的正则表达式很容易公式化:跳过所有内容,直到一行中包括最后一个逗号为止:

:sort/.*,/

对于任何其他列,我将使用该r标志,并通过跳过前N 2列(此处:)\zs

:sort/\([^,]*,\)\{2}\zs[^,]*/

1
由于最后一列恰好是十六进制数字,因此使用该x标志可能也会有所帮助。
jecxjo,2015年

这看起来很棒。最后一列可能是特例。中间列有任何简单表示吗?
汤姆森

我以为您能够为此提出一些建议,但是您来了。请单击旁边的勾号,接受我的(已编辑)答案。谢谢!
Ingo Karkat,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.