bash - special - sed string with
Escapar de barras diagonales en el comando sed (1)
Con Bash
y SED
, estoy tratando de reemplazar dos cadenas en un archivo js con URL.
Las dos direcciones URL que deben insertarse son parámetros de entrada cuando ejecuto el script .sh.
./deploy.sh https://hostname.com/a/index.html https://hostname2.com/test
Sin embargo, para hacer esto utilizable en mi comando sed tengo que escapar de todas las barras diagonales con: //
?
./deploy.sh https://////hostname.com///a///index.html https://////hostname2.com///test
Si se escapan, este comando SED funciona en 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
Ahora no quiero insertar urls escapados como parámetros, quiero que el propio script se escape de las barras diagonales.
Esto es lo que he intentado:
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
El parámetro se ve igual, pero en este caso el SED produce un error.
sed: 1: "s/tempAppUrl/https://// ...": bad flag in substitute command: ''/'
¿Alguien podría decirme la diferencia aquí? Las cuerdas se ven iguales pero dan diferentes resultados.
Sugiero reemplazar
sed "s/regex/replace/" file
con
sed "s|regex|replace|" file
Si tu sed lo soporta. Entonces ya no es necesario escapar de las barras.
El carácter directamente después de la s
determina qué carácter es el separador, que debe aparecer tres veces en el comando s
.