我需要订购这些文件名(我不能更改它们):
这也是我希望显示它们的预期顺序,因为我必须得到最后一个。
当我使用命令时
find ./databases/ -iname file_*.sql | sort -V产出如下:
file_31_stable.sql
file_32_stable.sql
file_41_stable.sql
file_42_stable.sql
file_310_stable.sql
file_410_stable.sql有一个表单可以使用文件的第一个编号,然后是其余的,或者一个命令来显示预期的顺序?
发布于 2021-10-22 09:10:16
没有任何分隔符,310显然比版本41更新。
如果您可以设计一种自动添加分隔符的方法,当然可以这样做。也许吧
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的输出如下所示
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识别为选项卡,可以尝试放置一个文字选项卡(我在这里不能这样做,因为堆栈溢出将选项卡呈现为空格)。
https://stackoverflow.com/questions/69673995
复制相似问题