【发布时间】:2019-07-15 15:00:54
【问题描述】:
假设我有这个文件:version.h
#define MAJ_VERSION 1
#define MIN_VERSION 4
#define BLD_VERSION 0
使用 bash 脚本,如何提取 $maj==1、$min==4 和 $bld==0 等 3 个单独变量中的值?
我围绕这个正则表达式尝试了几种方法:s/\_VERSION\s*(\d*)/,它允许我在每行中提取第一个匹配组中的值,但我未能找到一个优雅的解决方案。
例如,这不起作用(还需要一个计数器来消除这 3 个值的歧义):
str=$(cat version.h)
for var in ${str[@]}; do
echo
if [[ ${var} =~ (\_VERSION\s*)([0-9]*) ]]; then
echo "match: '${BASH_REMATCH[1]}'"
echo "match: '${BASH_REMATCH[2]}'"
fi
done
【问题讨论】:
-
要匹配数字,请使用
[0-9],而不是\d。