I have a config file which I use to store key values which is then over written on actual properties file. I have below code which I use for this purpose and this works fine for key values which does not have '&' in it.
Get the desired value from the config file:
postgresql_url=$(grep "^postgresql.url=" ./<file_name> |cut -d= -f2,3,4,5)
the above code gives me:
jdbc:postgresql://ec2-22-222-2-22.eu-central-1.compute.amazonaws.com:111/d3bxxxx2cj1?password=xyz&user=user1&sslmode=require
I am trying to over write the below value with the one from above
app1.postgresql.url=jdbc:postgresql://ec2-11-111-1-139.eu-west-1.compute.amazonaws.com:222/d53hyyyy928s0?password=abc&user=user1&sslmode=require
sed: however gives me this output after replacing:
sed -i -e '/postgresql.url[[:blank:]]*=/ s|=.*|='$postgresql_url'|' $property_file
Result:
app1.postgresql.url=jdbc:postgresql://ec2-22-222-2-22.eu-central-1.compute.amazonaws.com:111/d3bxxxx2cj1?password=xyz=jdbc:postgresql://ec2-11-111-1-139.eu-west-1.compute.amazonaws.com:222/d53hyyyy928s0?password=abc&user=user1&sslmode=requireuser=user1=jdbc:postgresql://ec2-11-111-1-139.eu-west-1.compute.amazonaws.com:222/d53hyyyy928s0?password=abc&user=user1&sslmode=requiresslmode=require
As you can see the replace it not what is required. How to ignore '&' in sed replacement and get below result:
app1.postgresql.url=jdbc:postgresql://ec2-22-222-2-22.eu-central-1.compute.amazonaws.com:111/d3bxxxx2cj1?password=xyz&user=user1&sslmode=require