5

我需要对一些包含 1,000 个条目的列表进行排序和比较。列表如下所示:

11-2-3049_2007_squib.pdf
11-11-5476_2004_squib.pdf
13-2-5477_2006_squib.pdf
14-3-3045A_2004_squib.pdf
14-CMF-3046_2004_squib.pdf
14-2-3047_2005_squib.pdf
14-4-3048_2004_squib.pdf
15-7-3050P_2004_squib.pdf

我希望按第二个-和之前的数字进行排序_,例如3049在第一个示例中。

我无法将按列排序和正则表达式的东西结合起来取得任何成功。大家有什么建议?

4

2 回答 2

8

这应该可以解决问题:

:sort r  /\v^(.{-}-){2}\zs.{-}\ze_/

:help sort

这里的背景

正则表达式包含一些曲折:

  • \v进入非常神奇的模式(减少逃避的需要)
  • \zs\ze标记实际匹配结果的开始和结束
  • {-}执行非贪婪的 kleene-star 匹配(在 Perl 表示法中,.{-}将是.*?
于 2012-10-05T19:06:10.760 回答
4

使用外部sort程序:

:%!sort -n -t- -k3,3
于 2012-10-05T19:10:49.287 回答