user05209
user05209

Reputation: 41

replace specific char of a string using sed using shell script

I have to replace a specific line of a file with some other value. for eg: I have a file with content as below:

request.timing=0/10 * * * * * ?

Now, I want to replace 10 (or to be specific, any value in that place) with a dynamic value. Eg, if I want to replace that with 20, the file should be updated as:

request.timing=0/20 * * * * * ?

Can someone help me? I am using sed as below:

sed -i "s/request.timing=0\/??/request.timing=0\/$poller"

where poller is dynamic value we pass.

Upvotes: 3

Views: 93

Answers (3)

miken32
miken32

Reputation: 42743

The reason that you were having troubles is that ? is not valid in the regular expression. Use . instead. ? is used to say the previous character may be present 0 or 1 times.

sed -i "s/request.timing=0\/../request.timing=0\/$poller"

(That's not to say the other answers aren't correct!)

Upvotes: 0

whoan
whoan

Reputation: 8531

First of all, you must check the characters the variable $poller has, because sed can interpret any character in there as a special one. Once you have checked that, use a sed separator which is not inside $poller. Let's suppose we can use /:

sed -r 's/(request.timing=0\/)[0-9]{2}/\1'"$poller"'/g'

How does it works

-r option activates extended regular expressions so you can use things like [0-9]{2}, and with ( ... ) you're capturing the string to use in the replacement site.

Upvotes: 1

Ed Morton
Ed Morton

Reputation: 204558

$ echo 'request.timing=0/10 * * * * * ?' |
sed -r 's:(request.timing=0/)[0-9]+:\1135:'
request.timing=0/135 * * * * * ?

$ poller="135"
$ echo 'request.timing=0/10 * * * * * ?' |
sed -r 's:(request.timing=0/)[0-9]+:\1'"$poller"':'
request.timing=0/135 * * * * * ?

Upvotes: 0

Related Questions