You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash脚本中从提交消息指定位置提取根目录名称

提取提交消息中的根目录名称并赋值给Bash变量

问题分析

你需要从格式固定的提交消息中提取指定的根目录名称(可选值:CORE|SHARED|CSR|ADM|BUS)并赋值给变量,之前的尝试存在两个关键问题:

  1. 第一个sed命令错误:sed -n '/CORE/'仅匹配包含CORE的行,但-n模式下没有添加打印动作(p),即便添加也只是输出整行,无法提取目标值。
  2. 变量赋值方式错误:app='xxx' | sed...这种写法是直接将字符串赋值给app,管道后的sed没有输入来源,因此app最终为空。正确做法是用命令替换捕获sed的输出结果。

解决方案

方法1:使用sed提取(兼容多数环境)

通过精准正则匹配提取目标值,并用命令替换赋值给变量:

# 示例提交消息
commit_msg='GRP-0888 CHANGE CORE - (core/components/button) : Change button dimensions'

# 提取根目录名称(宽松匹配大写单词)
app=$(echo "$commit_msg" | sed -E 's/.*CHANGE ([A-Z]+) -.*/\1/')

# 或者更严格匹配指定可选值,避免误匹配
app=$(echo "$commit_msg" | sed -E 's/.*CHANGE (CORE|SHARED|CSR|ADM|BUS) -.*/\1/')

echo "$app"  # 输出:CORE

方法2:Bash内置正则匹配(无需外部命令,更高效)

利用Bash的[[ ]]正则匹配特性,直接捕获目标值:

commit_msg='GRP-0876 CHANGE BUS - (pages/login) : Some message'

if [[ $commit_msg =~ CHANGE (CORE|SHARED|CSR|ADM|BUS) - ]]; then
    app="${BASH_REMATCH[1]}"  # BASH_REMATCH[1]对应第一个捕获组的内容
    echo "$app"  # 输出:BUS
fi

内容的提问来源于stack exchange,提问作者Norayr Ghukasyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:50:14