我正在尝试使用regex获取分支名称,然后在一个案例中使用它
有人知道它是如何工作的吗?
可能的名称有:
- 版本/v.1->释放
- 母版->船长
- 开发->发展
BRANCH="release/v1.1";
#BRANCH="master";
#BRANCH="develop";
#branch_name=`expr "${BRANCH}" : '^(release)/v[0-9].[0-9]$'`
branch_name=`expr "${BRANCH}" : '^(master)|(release)/v[0-9].[0-9]$'`
echo $branch_name
cut
怎么样?
| cut -f1 -d"/"
这使用斜线作为分隔符,并且只显示第一个条目:
Prompt> echo "master" | cut -f1 -d"/"
master
Prompt> echo "develop" | cut -f1 -d"/"
develop
Prompt> echo "release/v1.1 you can put whatever here :-)" | cut -f1 -d"/"
release
编辑:为了使用它分配给变量branch_name
,您需要执行以下操作:
branch_name=$(echo $BRANCH | cut -f1 -d"/")
您还可以使用sed并将每个备选方案放入自己的组中
零件((release)/v[0-9]+(.[0-9]+)?
与发布匹配,后面跟着/
和1+数字,后面可选地跟着.
和1+位数。
在替换中,使用第2组和第4组。
for BRANCH in release/v1.1 master develop; do
sed -E 's~^((release)/v[0-9]+(.[0-9]+)?|(develop|master))$~24~' <<< "$BRANCH"
done
输出
release
master
develop
请参阅正则表达式组。
您也可以使用带awk的模式的较短版本,将字段分隔符设置为/
,并且当有匹配的打印字段1时。
awk -F'/' '/^(release/v[0-9]+(.[0-9]+)?|develop|master)$/ {print $1}' <<< "$BRANCH"