gpt4 book ai didi

bash - 如何按版本号对文件名进行排序?

转载 作者:行者123 更新时间:2023-11-29 08:44:02 26 4
gpt4 key购买 nike

在“数据”目录中有这些文件:

command-1.9a-setup
command-2.0a-setup
command-2.0c-setup
command-2.0-setup

我想对文件进行排序以获得此结果:

command-1.9a-setup
command-2.0-setup
command-2.0a-setup
command-2.0c-setup

我试过了

find /data/ -name 'command-*-setup' | sort --version-sort --field-separator=- -k2 

但是输出是

command-1.9a-setup
command-2.0a-setup
command-2.0c-setup
command-2.0-setup

我发现给我想要的输出的唯一方法是

tree -v /data

我怎样才能按照想要的顺序对输出进行排序?

最佳答案

编辑: 事实证明,Benoit 走在了正确的轨道上,而 Roland 打破了平衡

您只需告诉 sort 考虑字段 2(添加“,2”):

find ... | sort --version-sort --field-separator=- --key=2,2

原答案:忽略

如果你的文件名中连字符之间没有空格,你可以试试这个:

find ... | sed 's/.*-\([^-]*\)-.*/\1 \0/;s/[^0-9] /.&/' | sort --version-sort --field-separator=- --key=2 | sed 's/[^ ]* //'

第一个 sed 命令使行看起来像这样(我添加了“10”以表明排序是数字):

1.9.a command-1.9a-setup
2.0.c command-2.0c-setup
2.0.a command-2.0a-setup
2.0 command-2.0-setup
10 command-10-setup

额外的点使带字母后缀的版本号排在不带后缀的版本号之后。第二个 sed 命令从每一行中删除带前缀的版本号。

失败的原因有很多种。

关于bash - 如何按版本号对文件名进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com