unix - 实现 ls' -v 标志的可移植方法(即按版本排序)?

标签 unix shell standards posix ls

我正在编写一些我只想依赖标准化功能的构建脚本。
我需要按版本对一些文件进行排序。假设文件是​​ bar-1.{0,2,3} bar-11.{0,2,3}。

默认情况下, ls 给我:

bar-1_0
bar-11_0
bar-11_2
bar-11_3
bar-1_2
bar-1_3

使用 'ls -v' 很容易得到我想要的东西:
bar-1_0
bar-1_2
bar-1_3
bar-11_0
bar-11_2
bar-11_3

问题是'ls -v' is not standard .标准sort似乎也缺少我想要的选项,尽管我可能正在查看旧版本的规范。

谁能建议一种可移植的方法来实现这种效果,而无需编写我自己的排序例程?

谢谢,
里斯

最佳答案

sort -n -t- -k2似乎做你想做的。 -n为您提供数字(即非字母)排序; -t-将字段分隔符设置为 - , 和 -k2选择第二个字段,即版本号。

我的 sort , 在 Ubuntu 上,甚至可以正确执行带有下划线的部分,但我不确定这是否是标准的。可以肯定的是,您可以先按次要版本排序,然后再按主要版本排序。

关于unix - 实现 ls' -v 标志的可移植方法(即按版本排序)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481824/

相关文章:

shell - npx:shell-auto-fallback 参数已被删除

Bash - 在文件名中间添加 0

shell - Shell 脚本执行是同步的吗?

c++ - 写入 std::string 是否合法?

python - 如何在Python中发送和接收实时信号 `sigqueue()`?

python - 在 Python 中,如果不使用/proc 文件系统,我如何判断给定的 PID 是否正在运行?

bash - 如何在参数位于中间的位置创建别名?

linux - 如何在 unix 或 linux 中基于 grep、sed 或 awk 获取 unix 目录中的文件名?

java - DTO 与 Formbean

c++ - C++ 标准到底在哪里说取消引用未初始化的指针是未定义的行为?