sid*_*com 23 sorting bash shell version
在目录"data"中是这些文件:
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
Run Code Online (Sandbox Code Playgroud)
但输出是
command-1.9a-setup
command-2.0a-setup
command-2.0c-setup
command-2.0-setup
我找到的唯一方法给了我想要的输出
tree -v /data
Run Code Online (Sandbox Code Playgroud)
我怎样才能按需要的顺序对输出进行排序?
Pau*_*ce. 14
编辑: 事实证明,Benoit在正确的轨道上走得很好,Roland倾斜了平衡
你只需要告诉只sort考虑字段2(添加",2"):
find ... | sort --version-sort --field-separator=- --key=2,2
Run Code Online (Sandbox Code Playgroud)
原答案: 忽略
如果您的文件名中没有一个包含连字符之间的空格,您可以尝试这样做:
find ... | sed 's/.*-\([^-]*\)-.*/\1 \0/;s/[^0-9] /.&/' | sort --version-sort --field-separator=- --key=2 | sed 's/[^ ]* //'
Run Code Online (Sandbox Code Playgroud)
第一个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
Run Code Online (Sandbox Code Playgroud)
额外的点使得带有后缀版本号的字母排序在没有后缀的版本号之后.第二个sed命令从每行中删除前缀版本号.
有很多方法可能会失败.
| 归档时间: |
|
| 查看次数: |
12876 次 |
| 最近记录: |