首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按版本排序文件名

按版本排序文件名
EN

Stack Overflow用户
提问于 2021-10-22 08:49:23
回答 1查看 57关注 0票数 1

我需要订购这些文件名(我不能更改它们):

  • file_31_stable.sql
  • file_32_stable.sql
  • file_310_stable.sql
  • file_41_stable.sql
  • file_42_stable.sql
  • file_410_stable.sql

这也是我希望显示它们的预期顺序,因为我必须得到最后一个。

当我使用命令时

代码语言:javascript
复制
find ./databases/ -iname file_*.sql | sort -V

产出如下:

代码语言:javascript
复制
file_31_stable.sql
file_32_stable.sql
file_41_stable.sql
file_42_stable.sql
file_310_stable.sql
file_410_stable.sql

有一个表单可以使用文件的第一个编号,然后是其余的,或者一个命令来显示预期的顺序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-22 09:10:16

没有任何分隔符,310显然比版本41更新。

如果您可以设计一种自动添加分隔符的方法,当然可以这样做。也许吧

代码语言:javascript
复制
find ./databases/ -iname 'file_*.sql' |
sed 's/^\([^_]*_\)\([0-9]\)\([0-9]*\)/\2.\3\t\1\2\3/' |
sort -k1 -V |
cut -f2-

如果您知道主要版本必须始终是一个个位数,但显然,在一般情况下,不可能作出这样的假设。

这将在实际值之前添加一列,对其进行排序,然后剥离所添加的列;还请参阅Schwartzian变换。在cut之前,sort的输出如下所示

代码语言:javascript
复制
3.1     file_31_stable.sql
3.2     file_32_stable.sql
3.10    file_310_stable.sql
4.1     file_41_stable.sql
4.2     file_42_stable.sql
4.10    file_410_stable.sql

如果您的sed不将\t识别为选项卡,可以尝试放置一个文字选项卡(我在这里不能这样做,因为堆栈溢出将选项卡呈现为空格)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69673995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档