git log结合grep提取FE字段异常:仅获FE=而非完整内容求助
解决Git钩子中完整提取
FE='内容'的问题 看起来你的问题出在正则表达式的匹配逻辑上——原代码里的FE=.*? 会在遇到第一个空格时就停止匹配,所以如果开发者输入的内容里包含空格,或者结尾没有空格,就只能拿到半截内容,甚至只有FE=。
问题根源拆解
原命令里的grep -o -P 'FE=.*? ':
.*?是非贪婪匹配,会尽可能早地停止匹配- 最后的空格
是终止条件,所以只要内容里有空格就会被截断;如果内容结尾没有空格,可能连完整的引号都拿不到
修复方案
既然你的需求是完整捕获FE='开发者输入的任意内容'(包括单引号和里面的所有内容),我们可以用更精准的正则来匹配单引号包裹的部分:
var_custom_FE_log="$(git log -1 --no-merges "$branch" | grep -o -P "FE='[^']+'")"
代码解释:
"$branch":用双引号包裹分支变量,避免分支名包含空格时出错FE='[^']+':这是核心正则,意思是:- 匹配
FE='开头 [^']+匹配任意不是单引号的字符(不管内容里有空格、特殊符号都能匹配)- 直到遇到下一个
'结束,完美覆盖FE='xxx'的完整格式
- 匹配
测试验证
如果提交日志里写的是FE='fix login page validation bug',这个命令会完整提取出:
FE='fix login page validation bug'
如果需要兼容没有单引号的场景(比如FE=fixbug),可以调整正则为FE=\S+(匹配无空格内容),或者FE=.+$(匹配从FE=到行尾的所有内容,适合FE是行内最后一项的情况),但前者无法处理带空格的内容,后者可能会误匹配同一行的其他内容,所以更推荐统一约定用FE='内容'的格式,这样匹配最准确。
内容的提问来源于stack exchange,提问作者Mansoor
相关产品推荐
相关产品推荐

