关于:sort命令
vim吧
全部回复
仅看楼主
level 7
azrnr 楼主
我在一个文本里面有若干行假设是下面这个样子:
d
c
b
a
c
b
a
第一行的d与后面带有缩进的三行看成一个整体与5,6,7行进行排序,想要的结果是:
a
b
c
d
c
b
a
然后单独对带有缩进的最后三行进行排序,最终结果是:
a
b
c
d
a
b
c
大家有什么方法来实现吗?有能实现这种功能的插件或者是vim自带的命令吗?
2012年10月29日 13点10分 1
level 7
azrnr 楼主
咕~~(╯﹏╰)b,缩进被取消了。。。。。我重新编辑请看3L
2012年10月29日 13点10分 2
level 7
azrnr 楼主

我在一个文本里面有若干行假设是下面这个样子:
d
(空格*4)c
(空格*4)b
(空格*4)a
c
b
a
第一行的d与后面带有缩进的三行看成一个整体与5,6,7行进行排序,想要的结果是:
a
b
c
d
(空格*4)c
(空格*4)b
(空格*4)a
然后单独对带有缩进的最后三行进行排序,最终结果是:
a
b
c
d
(空格*4)a
(空格*4)b
(空格*4)c
大家有什么方法来实现吗?有能实现这种功能的插件或者是vim自带的命令吗?
2012年10月29日 13点10分 3
level 14
象d这种情况是只有一个还是存在多个
2012年10月29日 14点10分 4
多个 甚至还有可能进一步嵌套下去
2012年10月30日 12点10分
回复 azrnr :多个....那我那代码就是两层.......那还要改...[瀑布汗~]
2012年10月31日 11点10分
level 10
:%s/^ /zzzz/g|%sort|%s/zzzz/ /g这个命令应该可以满足
2012年10月29日 16点10分 5
好的,我去试试
2012年10月30日 12点10分
回复 azrnr :我试了一下发现对于d那种特殊的情况不管用,d后面所属的三个带有缩进的貌似会被破坏被排列到最一行或者最后几行,总之就是远离了d,我恰恰想保持结构不被打乱
2012年10月30日 14点10分
哦,我理解错了!
2012年10月31日 06点10分
回复 bdtb_jumping :虽然不能满足我的要求,但是我还是从中学到了新东西,3q
2012年10月31日 11点10分
level 7
LZ 的意思是先按第一列排序,在按第二列排序吧,这种事一般都用perl, map sort map 最好处理了,shell的 sort -k 参数 也行的吧
2012年10月30日 13点10分 6
对对就是这个意思,我的概括能力太弱啦。。。。,shell是linux下的吧?我用windows是不是就不行了。另外perl不会啊,我倒是会一点python能用吗?需要什么模块?
2012年10月30日 14点10分
回复 azrnr :而且关键是结构不能破坏,这就好比一本书里面的目录,一级标签里面的子标签只能跟着自己的一级标签,而不能脱离这个标签,跑到其他一级标签里去或者独立出来。
2012年10月30日 14点10分
level 7
如果文件不是超级大,可以:
#!perl -lw
use strict;
undef $/;
my @array;
my @temp = sort map{split/\n(?!\s+)/}<DATA>;
for (@temp){
if (/\s+/) {
@array =split/\n/;
print $array[0];
print join "\n",sort grep{/^\s+/}@array;
}
else{
print;
}
}
__DATA__
e
****b
****d
****c
c
d
b
f
****i
****j
****a

2012年10月31日 10点10分 7
level 7
你把上面四个星号替换为 四个空格就行了
2012年10月31日 10点10分 8
level 7
如果有多个嵌套那我的代码还要继续判断,建议到CUpy版,shell版块或者perl版找更好方法[Love]
2012年10月31日 11点10分 9
看起来很复杂,我只能先留存下来慢慢研究了。非常感谢
2012年10月31日 11点10分
1