【问题标题】:Sed command ignoring single quotes in Groovy scripts忽略 Groovy 脚本中的单引号的 Sed 命令
【发布时间】:2018-03-02 17:31:19
【问题描述】:

您好,当我尝试在 Groovy 中使用 SED 替换字符串时,我遇到了这个问题,它忽略了我传递的单引号。这是我尝试在 sed 中使用双引号的代码,但它会引发错误。

            stage('Version')
        {
            dir('./Dest/Scripts/')
            {
                    sh "sed -i 's/VERSION_BUILD=0/VERSION_BUILD= '$Version', System2 = '$name'/g' setversion.sql"              
            }
        }

我想要的输出是

UPDATE &Shared_Version SET SharedVersion = '2010', System1 = 'XXXX', InetsoftVersion = 2, VERSION_BUILD='20180302', System2 = 'test';
COMMIT;

但是,在运行 Groovy 脚本后,我得到了以下结果。

UPDATE &Shared_Version SET SharedVersion = '2010', System1 = 'XXXX', InetsoftVersion = 2, VERSION_BUILD= 20180302, System2 = test;
COMMIT;

我知道在 shell 命令中如果我们传递双引号,它将被替换,但是 Groovy 不喜欢它。

sed -i "s/VERSION_BUILD=0/VERSION_BUILD= '$Version', System2 = '$name'/g" setversion.sql 

谁能帮我解决这个问题。

谢谢

【问题讨论】:

  • 怎么样:sh $/sed -i "s/VERSION_BUILD=0/VERSION_BUILD= '$Version', System2 = '$name'/g" setversion.sql/$
  • @tim_yates 我遇到了错误。 groovy.lang.MissingPropertyException: No such property: $ for class: groovy.lang.Binding at groovy.lang.Binding.getVariable(Binding.java:63) at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:242)
  • 恐怕很难过。希望有 Jenkins 知识的人可以加入
  • 你试过三引号版本吗?

标签: shell jenkins groovy sed


【解决方案1】:

以下脚本按预期工作

sh "sed -i 's/VERSION_BUILD=0/VERSION_BUILD= \\x27${Version}\\x27, System2 = \\x27$name\\x27/g' setversion.sql"

重点是单引号可以转义为\x27

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多