【发布时间】:2020-11-27 00:21:27
【问题描述】:
我想从my-app-1_4_5.img 中提取版本字符串(1_4_5),然后转换为不带文件名的点版本(1.4.5)。版本字符串将包含三个 (1_4_5) 或四个 (1_4_5_7) 段。
让这一班轮工作ls my-app-1_4_5.img | cut -d'-' -f 3 | cut -d'.' -f 1 | tr _ .
想知道是否有更好的方法,而不是从cut 管道输出。
【问题讨论】:
-
如果文件名总是像
file-name-x-1_2_3_4.ext,那么你可以简单地echo file-name-x-1_2_3_4.ext | tr _ .。 -
我已经更新了我的 Q。只想要最后的点版本号。没有文件名。
-
Don't parse
ls并且当 shell 具有内置参数扩展和正则表达式匹配时,不要使用外部实用程序。 -
你能澄清一下版本是否总是三段吗?如果没有,是否可以假设文件名中只有一个由下划线分隔的数字序列(可能包括单个数字)?
-
我会使用
ls my-app-1_4_5.img | sed 's/^.*-//;s/\..*$//;s/_/./g'。祝你好运。