Siddarth
Siddarth

Reputation: 381

groovy + shell : Escaping characters

I am using Jenkins Pipeline using Groovy sandbox. And i am trying to run a shell script in a groovy sh function.

The original shell script is

sed -i 's/sometext/'"${othertext}"'/' filename

I am trying to replace a particular text with other text (taken dynamically). The script works fine when executed directly. But I want to use it in jenkins groovy sh function.

sh(script: '<above shell script>',  returnStdout:false)

But there is a problem of escaping characters. I tried this way of escaping character

sh (script: '''sed -i 's/sometext/othertext/' filename''', returnStdout:false)

It works fine but othertext is not taken dynamically. Can someone please help me in escaping characters with the original script? Or please suggest any other way of doing this.

Upvotes: 5

Views: 11608

Answers (3)

Rajesh Gurram
Rajesh Gurram

Reputation: 54

node{
   sh 'sed -i 's/sometext/'"${othertext}"'/' filename'
}

Upvotes: 0

Siddarth
Siddarth

Reputation: 381

With the inputs from daggett and mkobit and i did few experiments, the following script worked well

def l_othertext = sh(script: 'echo ${othertext}', returnStdout: true).trim()
print('l_othertext='+l_othertext)
sh "sed -i 's/sometext/'${l_othertext}'/' filename"

Upvotes: 3

daggett
daggett

Reputation: 28634

if othertext is a groovy variable then this should work:

def othertext = 'newtext'
sh (script: """sed -i 's/sometext/${othertext}/' filename""", returnStdout:false)

Upvotes: 0

Related Questions