with special reemplazar escape characters bash shell sed

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 .