Z Bash
i SED
Próbuję zastąpić dwa ciągi w pliku js adresami URL.Uciekające ukośniki w poleceniu sed
Dwa adresy URL, które należy wstawić, to parametry wejściowe po uruchomieniu skryptu .sh.
./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test
Jednak aby ten użyteczny w moim sed polecenia muszę uciec wszystkie ukośniki z: \\
?
./deploy.sh https:\\/\\/hostname.com\\/a\\/index.html https:\\/\\/hostname2.com\\/test
Jeśli są to uciekł sed polecenie działa na 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
Teraz nie chcę wstawić uciekły adresy URL jako params, chcę skrypt to samo ucieczki ukośniki .
To co próbowałem:
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
params wygląda tak samo, ale w tym przypadku LEP wyrzuca błąd
sed: 1: "s/tempAppUrl/https:\\/\ ...": bad flag in substitute command: '\'
Czy ktoś może mi powiedzieć różnicę tutaj? Struny wyglądają tak samo, ale dają różne wyniki.
To nie tylko '/' s, jest dużo więcej znaków, które musisz uciec (np. '' 'W twoim bieżącym regexp), ale sed nie da ci komunikatu o błędzie dla większości z nich, to ' Po prostu uszkodzę twoje wyniki. Zobacz http://stackoverflow.com/questions/29613304/is-it-possible-to-escape-regex-metacharacters-reliably-with-sed/29626460#29626460. Jeśli chcesz dowiedzieć się, jak wykonać solidne podstawianie ciągów znaków, opublikuj nowe pytanie (a odpowiedź nie będzie sed, ponieważ sed nie obsługuje ciągów!). –