Выключение косой черты в команде sed

С Bash и SED Я пытаюсь заменить две строки в файле js с URL-адресами.

Два URL-адреса, которые должны быть вставлены, являются входными параметрами при запуске .sh script.

./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test

Однако, чтобы сделать это полезным в моей команде sed, мне нужно избежать всех косых черт с помощью: \\?

./deploy.sh https:\\/\\/hostname.com\\/a\\/index.html https:\\/\\/hostname2.com\\/test

Если они экранированы, эта команда SED работает на 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

Теперь я не хочу вставлять экранированные URL-адреса в качестве параметров, я хочу, чтобы script он сам удалял косые черты.

Вот что я пробовал:

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

Параметры выглядят одинаково, но в этом случае SED выдает ошибку

sed: 1: "s/tempAppUrl/https:\\/\ ...": bad flag in substitute command: '\'

Может ли кто-нибудь сказать мне разницу здесь? Строки выглядят одинаково, но дают разные результаты.

Ответ 1

Предлагаю заменить

sed "s/regex/replace/" file

с

sed "s|regex|replace|" file

если ваш седь поддерживает это. Тогда больше не нужно избегать косых черт.

Символ непосредственно после s определяет, какой символ является разделителем, который должен появляться три раза в команде s.