Regex分支名称模式有条件



我正在尝试使用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"

最新更新