With Bash and SED I'm trying to replace two strings in a js file with URL's.
The two urls that should be inserted is input params when I run the .sh script.
./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test However to make this usable in my sed command I have to escape all forward slashes with: \\ ?
./deploy.sh https:\\/\\/hostname.com\\/a\\/index.html https:\\/\\/hostname2.com\\/test If they are escaped this SED command works on Mac OSX Sierra
APP_URL=$1 API_URL=$2 sed "s/tempAppUrl/$APP_URL/g;s/tempApiUrl/$API_URL/g" index.src.js > index.js Now I don't want to insert escaped urls as params, I want the script it self to escape the forward slashes.
This is what I've tried:
APP_URL=$1 API_URL=$2 ESC_APP_URL=(${APP_URL//\//'\\/'}) ESC_API_URL=(${API_URL//\//'\\/'}) echo 'Escaped URLS' echo $ESC_APP_URL #Echos result: https:\\/\\/hostname.com\\/a\\/index.html echo $ESC_API_URL #Echos result: https:\\/\\/hostname2.com\\/test echo "Inserting app-URL and api-URL before dist" sed "s/tempAppUrl/$ESC_APP_URL/g;s/tempApiUrl/$ESC_API_URL/g" index.src.js > index.js The params looks the same but in this case the SED throws a error
sed: 1: "s/tempAppUrl/https:\\/\ ...": bad flag in substitute command: '\' Could anyone tell me the difference here? The Strings looks the same but gives different results.
/s, there's a LOT more characters you have to escape (e.g. the.s in your current regexp) but sed won't give you an error message for most of them, it'll just corrupt your output. See stackoverflow.com/questions/29613304/…. If you want to learn how to do a robust string substitution then post a new question (and the answer will not be sed since sed does not support strings!).