Jonathan Andersson Jonathan Andersson - 12 days ago 6
Bash Question

Escaping forward slashes in sed command

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.

Answer

I suggest to replace

sed "s/regex/replace/" file

by

sed "s|regex|replace|" file

if your sed supports it. Then it is no longer necessary to escape the slashes.

Comments