Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 管道内的sed不';不行。它要么抛出;`s';上的引用\1无效;命令';s RHS“;或者它会产生意外的o/p_Jenkins_Sed_Jenkins Pipeline - Fatal编程技术网

Jenkins 管道内的sed不';不行。它要么抛出;`s';上的引用\1无效;命令';s RHS“;或者它会产生意外的o/p

Jenkins 管道内的sed不';不行。它要么抛出;`s';上的引用\1无效;命令';s RHS“;或者它会产生意外的o/p,jenkins,sed,jenkins-pipeline,Jenkins,Sed,Jenkins Pipeline,我不确定这是否合适,是否有办法继续发布对现有线程的问题,如下所示: 和 我面临的问题是Jenkins(2.249.1)管道脚本: pipeline { agent any stages { stage("exp") { steps { script { def output=sh(returnStdout: true, script: "

我不确定这是否合适,是否有办法继续发布对现有线程的问题,如下所示:

我面临的问题是Jenkins(2.249.1)管道脚本:

pipeline {
    agent any
    stages {
        stage("exp") {
            steps {
                script {
                    def output=sh(returnStdout: true, script: "echo ab4d | sed 's/b\\(([0-9]\\))/B\\1/' ").trim()
                    echo "output=$output";
                }
            }
        }
    }
}
当运行构建时,我得到这个o/p,我只希望得到“B4”

我尝试的第二个版本是: def output=sh(returnStdout:true,脚本:“echo ab4d|sed's/b\([0-9]\)/b\1/”)。trim()

对于第三个版本:def output=sh(returnStdout:true,脚本:“echo ab4d | sed's/b([0-9])/b\1/”)。trim()

我想要的输出只是B4。请让我知道解决此问题的正确方法,并帮助我了解正在进行的sed


PS:我不确定我的Jenkins支持什么,不支持什么,比如使用-r选项等等。。。因此,我故意避免使用它,直到我确切知道它是否是必须的。

错误消息意味着您的正则表达式没有包含任何分组括号(在trad.
sed中,每个括号前面都需要一个反斜杠)。你的第二次尝试在我看来很好;你为什么不想用这个?只需扩展正则表达式,使其与您想要匹配的文本真正匹配即可。事实上,提出一个新问题,并链接到之前的相关问题,这正是解决问题的方法。(我猜在Jenkins管道中可能存在关于如何通过反斜杠的重复。)明确地说,在shell或Jenkins中,用B4替换
ab4d
,sed
命令将是
s/ab\([0-9]\)d/B\1/
或者
s/.B\([0-9]\)/B\1/
更一般地匹配B+数字前后的任何一个字符(甚至是
s/*B\([0-9]\)。/B\1/
替换整行)。在shell脚本中,您应该在脚本周围加上单引号,以防止shell与反斜杠混淆(或者将脚本保存在一个文件中,并使用
sed-f filename
,但对于这样一个小脚本来说,这是愚蠢的,除非在Windows上,如果你能让它工作起来,你必须高兴)。@Ryszard为什么会这样做(肯定)不同?明白了!添加
*
以匹配并替换已解决的整行。我用grep的眼光看着sed,尽管我以前用过几次。在实际场景中,我只是使用sed来匹配整个文件中的三位数字。必须添加带有上述语法的“grep | sed”才能得到我需要的。
+ echo ab4d
+ sed 's/b\(([0-9]\))/B\1/'
[Pipeline] echo
output=ab4d
+ echo ab4d
+ sed 's/b\([0-9]\)/B\1/'
[Pipeline] echo
output=aB4d
+ echo ab4d
+ sed 's/b([0-9])/B\1/'
sed: -e expression #1, char 15: invalid reference \1 on `s' command's RHS