正则表达式解析字符串以提取shell脚本中的数字

时间:2014-08-07 16:45:29

标签: bash awk sed grep

如何解析下面的字符串,从下面的文件名字符串中提取版本号和版本号。

program-product_3.0.1009-5-XY1.0.456-1_i386.deb

我有兴趣获得

Version number : 3.0.1009
Release number : 5 

我尝试了grepawksed,但我无法做到这一点。

字符串遵循模式

Filename_Version-Release-OtherDependentPackageNameAndVersion-Release_Arch.deb. 

请注意,命名约定不受我的控制。

3 个答案:

答案 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