我有一个文件'README.txt',其中包含以下行-
“版本”:“ 1.0.0-alpha-test.7”
使用Jenkins管道,我想用
替换此行"version": "1.0.0-alpha-test.{BUILD_NUMBER}"
当我在linux集群上尝试以下sed命令时,它会起作用
sed -i -E "s#(\"version\"[ ]*:[ ]*\".+alpha-test\.)[0-9]+\"#\1${BUILD_NUMBER}#g" README.txt
同一命令在Jenkins管道上不起作用。
尝试以下查询,但不起作用-
sh """
sed -i -E "s|([\"]version[\"][ ]*:[ ]*[\"].+alpha-test\\.)[0-9]+\"|\1${BUILD_NUMBER}|g" README.txt
cat README.txt
"""
/home/jenkins/workspace/test/test-pipeline@tmp/durable-eb774fcf/script.sh: 3: /home/jenkins/workspace/test/test-pipeline@tmp/durable-eb774fcf/script.sh: 语法错误:“)”意外
答案 0 :(得分:0)
我不知道“ Jenkins管道”是什么,但是我看不出您发布的sed脚本以您描述的方式失败的任何原因,因此我怀疑您的问题出在代码的其他地方。也许与文件的开头和结尾处的sh """
和"""
有关(我认为这与“ Jenkins管道”语法有关,因为对于Shell脚本没有意义)。
无论如何,让我们清理引号,转义和括号表达式,看看是否有帮助:
$ cat README.txt
"version": "1.0.0-alpha-test.7"
$ BUILD_NUMBER=321
$ sed -E 's|("version" *: *".+alpha-test\.)[0-9]+|\1{BUILD_NUMBER}|g' README.txt
"version": "1.0.0-alpha-test.{BUILD_NUMBER}"
$ sed -E 's|("version" *: *".+alpha-test\.)[0-9]+|\1'"$BUILD_NUMBER"'|g' README.txt
"version": "1.0.0-alpha-test.321"
我无法从您的问题中得知您是否要在输出中使用{BUILD_NUMBER}
或$BUILD_NUMBER
,所以我同时显示了两者。
答案 1 :(得分:0)
最好使用perl命令...
script{
old_version = (sh (returnStdout: true, script:'''old_version=`cat version.cfg |grep VERSION=|cut -d "=" -f2`
echo $old_version''')).toString().trim()
sh """
if [ "$old_version" != $new_version ]; then
perl -pi -e "s,$old_version,$new_version,g" version.cfg
##-- git push operation --##
fi
"""
}