我正在升级一个基本上更新版本的bash脚本,并构建提交以标记版本。源代码(javascript)代码在resp not-minified和minified中可能看起来像这样(下):
// not minified
function(){
version = {
version: '0.0.6',
build: '%build%'
};
// etc
// minified looks like:
function(){version={version:"0.0.6",build:"%build%"};othercode...
在bash脚本中,抓取并更改该内容的行是:
sed -i".$BUILD" -e "s/\(version:[ ]*\)'[0-9. ]*-dev'/\1'$TAG$SUFFIX'/" -e "s/\(build:[ ]*\)'%build%'/\1'$BUILD'/" "$COREFILE"
但正则表达式不能容忍缩小的代码。说实话,我不在javascript和php正则表达式之外,所以我无法理解这一行背后的逻辑以及它是如何构建的。
如果有人可以提供帮助会很棒,我会继续研究以理解这个正则表达式。
答案 0 :(得分:2)
你有几个问题:
缩小版使用"
代替'
,而正则表达式仅查找'
,以使其同时替换'
的出现次数在匹配部分中使用[\"']
。
build 部分即使对于非缩小的部分也不匹配,您在构建号之后寻找字符串-dev
,但它不在那里。使用\(-dev\|\)
允许-dev
或空白。
命令是:
sed -i ".$BUILD" -e "s/\(version:[ ]*\)[\"'][0-9. ]*\(-dev\|\)[\"']/\1'$TAG$SUFFIX'/" -e "s/\(build:[ ]*\)[\"']%build%[\"']/\1'$BUILD'/" "$COREFILE"