是否可以对多列进行排序并忽略以#开头的某些行? 我有这样的文字:
#Comments
#More comments
foo;1;1
foo;3;2
bar;2;1
我想对第一个数字进行排序,如果最后一个数字相等。 我试过这个:
:%!sort -t';' -k2n -k3n
但这会影响评论部分。 我知道我可以让vim忽略这样的评论:
:sort /^#/
但我现在如何选择字段? shell排序是否有字段忽略器?或者VIM排序可以使用字段吗?
顺便说一句,评论部分的长度会增加,所以头部/尾部不起作用。
答案 0 :(得分:1)
我不认为
:sort /^#/
做你想要的。它将对注释进行排序,将它们放在缓冲区的末尾,并将其他行保留为原始顺序。更接近你想要的是
:sort /;/
这将使所有注释保留在缓冲区的顶部,按原始顺序排序,并在第一个; 之后的行部分排序。可能是字典排序不是你想要的。相反,你可以使用
:sort /;/ n
这将进行数字排序,但忽略第一个数字后的行部分。
为了避免对碰巧包含; 字符的注释行进行排序,您可以使用更复杂的模式:
:sort /^\(\s*#\)\@!.\{-};/ n
或(使用我之前从未尝试过的功能)
:sort /^\s*[^#]\&.\{-\};/ n
我老了,使用vim的默认设置,但很多人更喜欢\v
(非常神奇)的设置。这使得这些更简单:
:sort /\v^(\s*#)@!.{-};/ n
:sort /\v^\s*[^#]&.{-};/ n
OTOH,您使用外部排序建议的版本似乎完美无缺。
$ sort --version
sort (GNU coreutils) 5.93