Vim 如何对包含特定单词的行按列排序
我只想对包含特定单词的行的特定列进行排序。我不想看到不包含该单词的行。例如,我有一个文本文件:Vim 如何对包含特定单词的行按列排序,vim,Vim,我只想对包含特定单词的行的特定列进行排序。我不想看到不包含该单词的行。例如,我有一个文本文件: sdf ggfds 7 sdf sgs 5 sdf dfgs 3 foo dffg 2 bar dffg 2 sdf sddfg 4 我想对第三列中只包含“sdf”字的行进行排序(不必在第一列中) 我想看到这个输出: sdf dfgs 3 sdf sddfg 4 sdf sgs 5 sdf ggfds 7 通过管道将输入传
sdf ggfds 7
sdf sgs 5
sdf dfgs 3
foo dffg 2
bar dffg 2
sdf sddfg 4
我想对第三列中只包含“sdf”字的行进行排序(不必在第一列中)
我想看到这个输出:
sdf dfgs 3
sdf sddfg 4
sdf sgs 5
sdf ggfds 7
通过管道将输入传输到外部命令:
:%!grep sdf | sort -n -k3
详情:
:v/sdf/d
:sort n /[^[:digit:]]*/
- 首先删除不包含“sdf”的所有行
- 第二种方法是忽略非数字对数字进行排序
:v/sdf/d
sort n /\D*/
因为\D
相当于[^[:digit:][]
,而且打字要少得多。有关详细信息,请参阅
:help \D
要特别匹配第三个字段,而不仅仅是第一个数字,请使用
:sort n /\(\S\+\s+\)\{2}/`
或
见:
顺便说一句,有些人发现更容易记住:g/sdf/d
,其作用与:v/sdf/d
-:g
与:g
相反,与:v
相同
:help :v
:help :g
通过在视觉模式下选择第二列进行排序(例如Control+v),然后运行:
!sort
或按第3列排序
sort -k 3
或
或者,使用Shift+V命令选择要排序的行。然后进入
!sort -k 3n
或者使用下面的代码告诉Vim跳过每行中的前两个单词,并根据以下内容进行排序:
:%sort /^\S\+\s\+\S\+\s\+/
或按第8行排序:
:sort /.*\%55v/
“虚拟”规范是列的绝对数,它将空格+制表符视为单个字符(简而言之,它不将制表符计算为八个空格)
因此,要按最后一列进行排序:
:%sort /\<\S\+\>$/ r
:%sort/\$/r
+1:一种很好的原生Vim方式,无需生成外部外壳。一种有趣的方式,Maxim,但我也希望在特定列上排序是的,操作系统的排序使按特定列排序更容易,但您可以使用:sort n/\v(\s+\s+{2}/在Vim中执行Al指出的相同操作。当然,只有在安装了grep和sort的计算机上,这才有好处-Windows上的许多Vim用户会发现这不起作用,可能不想安装gnuwin32或cygwin。到目前为止,这是最好、最直观的答案!
:%sort /^\S\+\s\+\S\+\s\+/
:sort /.*\%55v/
:%sort /\<\S\+\>$/ r