如何解析下面的字符串,从下面的文件名字符串中提取版本号和版本号。
program-product_3.0.1009-5-XY1.0.456-1_i386.deb
我有兴趣获得
Version number : 3.0.1009
Release number : 5
我尝试了grep
,awk
和sed
,但我无法做到这一点。
字符串遵循模式
Filename_Version-Release-OtherDependentPackageNameAndVersion-Release_Arch.deb.
请注意,命名约定不受我的控制。
答案 0 :(得分:3)
使用纯BASH:
s='program-product_3.0.1009-5-XY1.0.456-1_i386.deb'
[[ "$s" =~ _([^-]+)-([^-]+) ]] && echo "${BASH_REMATCH[1]} : ${BASH_REMATCH[2]}"
3.0.1009 : 5
答案 1 :(得分:2)
这是awk
版本:
awk -F'[_-]' '{print "Version number : "$3; print "Release number : "$4}'
答案 2 :(得分:0)
使用早期的bash版本2.05b或更新版本:
#!/bin/bash
F='program-product_3.0.1009-5-XY1.0.456-1_i386.deb'
IFS=- read V R __ <<< "${F#*_}"
printf 'Version number : %s\nRelease number : %s\n' "$V" "$R"
使用以下命令运行:
bash script.sh
输出:
Version number : 3.0.1009
Release number : 5